haskell - MonadWriter 类中的冗余

标签 haskell monads monad-transformers

我一直在阅读 MonadWriter 的文档类,并且我发现 writertell 可以相互编写。在我看来,如果类方法的行为如文档所描述的那样,那么 pass 可以用 telllisten 来编写:

pass :: m (a, w -> w) -> m a
pass m = do
    ((a, f), w) <- listen m
    tell $ f w
    return a

我的理解正确吗?

最佳答案

这最终会写成 w <> f w ,但应该写 f w .

ghci
> import Control.Monad.Writer as W
> :{
pass m = do
  ((a, f), w) <- listen m
  tell (f w)
  return a
:}
> pass (writer ((0, map (+ 10)), [1])) :: Writer [Integer] Int
WriterT (Identity (0,[1,11]))
> W.pass (writer ((0, map (+ 10)), [1])) :: Writer [Integer] Int
WriterT (Identity (0,[11]))

关于haskell - MonadWriter 类中的冗余,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51202214/

相关文章:

haskell - $! 是什么意思?在 Haskell 中意味着/做什么?

scala - 一步一步/深入解释 : The Power of (Co)Yoneda (preferably in scala) through Coroutines

haskell - 在运行时选择一个 monad

Haskell 将不确定性与错误处理相结合

haskell - Haskell的两级类型层次结构

haskell - 无法将类型 ‘a’ 与 Monad 实例定义中的 ‘b’ 错误匹配

haskell - 如何即时使用 IO monad 输出

haskell - 中断 MonadState 中冗长的纯计算

haskell - ghc-mod 期望 MonadBaseControl 具有 `StM` 关联的新类型而不是 `StT` 关联的类型

haskell - `<<%~` 的类似物不需要 Monoid 进行遍历