【问题标题】:Is the `Monad ((,) w)` instance anywhere standard?`Monad ((,) w)` 实例在任何地方都是标准的吗?
【发布时间】:2010-11-17 11:55:33
【问题描述】:

我一直使用Writer的配对拼写,但我总是要实例化自己:

instance (Monoid w) => Monad ((,) w) where
    return x = (mempty, x)
    ~(w,x) >>= f = let (w', y) = f x in (w `mappend` w', y)

这是否存在于标准库中的任何位置?

【问题讨论】:

  • 既然你提到它,很奇怪Control.Monad.Instances 包含((,) a)Functor 实例,但不包含Monad 实例,尽管有匿名读者((->) e) 和匿名错误Either e.
  • @McCann:你如何为((,) a) 实现 Monad 实例?例如,我不知道如何实现return
  • @trinithis,就像问题中的那个(你需要一个Monoid a 约束)。就是这样。

标签: haskell monads


【解决方案1】:

正如评论中提到的 camccann,Control.Monad.Instances 仅定义了 Functor 实例。

Control.Monad.Applicative 定义了Applicative 实例。

transformers 包,因此还有版本 2 及更高版本 mtl 包,定义一个包装函数writer :: (a, w) -> Writer w a

但我在任何地方都没有找到Monad 实例。

【讨论】:

    猜你喜欢
    • 2015-07-05
    • 2021-07-19
    • 1970-01-01
    • 2021-09-21
    • 2017-09-23
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多