代码之家  ›  专栏  ›  技术社区  ›  luqui

'monad((,)w)'实例是否标准?

  •  19
  • luqui  · 技术社区  · 14 年前

    我用的是 Writer 一直以来,但我总是要例举自己:

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

    这在标准库中的任何地方都存在吗?

    1 回复  |  直到 14 年前
        1
  •  8
  •   Yitz    14 年前

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

    Control.Monad.Applicative 定义 Applicative 实例。

    这个 transformers 软件包,也就是 mtl 包,定义包装函数 writer :: (a, w) -> Writer w a .

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