【问题标题】:Purpose of Reader MonadReader Monad 的目的
【发布时间】:2017-08-16 09:04:05
【问题描述】:

我很难理解 Reader Monad。从我阅读的所有地方我的理解是,它允许将变量(读取模式)共享给不同的函数。下面是两个函数计算和相同的实现(抱歉函数名称不好),一个有 Reader,一个没有它。我没有得到使用 Reader 的好处。

module Moreunderstanding where
import Control.Monad.Reader


computation :: Reader Int Int

computation = do 
  a <- ask
  b <- asks square
  return (a + b) 


square :: Int -> Int
square x = x ^ 2


samething:: Int -> Int 

samething = do 
  a <- square
  b <- id
  return (a + b)

我不确定我在这里缺少什么。

【问题讨论】:

标签: haskell monads


【解决方案1】:

它们都做同样的事情。事实上,Reader monad 与函数 monad(您在 samething 中使用的)几乎相同。它之所以有用是因为 MonadReader 类型类((-&gt;) a 有一个实例)和 ReaderT,它允许您将多个 monad 转换器堆叠在一起。

这也是一个很好的意图声明。这意味着“我在这里有一个只读值,将在此计算中使用”。我会说你的直觉非常准确,Reader monad 并没有太多,它非常简单。

【讨论】:

    【解决方案2】:

    当您有多个参数必须在函数之间传递时,Reader monad 会变得更加有用。例如,如果您正在构建一些 API 端点并且想要传递一个配置对象。在这种情况下,使用 Reader monad 并保持内部函数签名干净会容易得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-18
      • 2018-03-26
      • 2023-04-05
      • 2021-01-18
      • 1970-01-01
      • 2017-06-22
      • 2018-09-04
      • 2016-10-17
      相关资源
      最近更新 更多