使用带有标识的Monad转换器而不是仅仅使用“标准”版本的转换器有什么意义?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (50)

使用带有标识单的Monad转换器而不是仅仅使用“标准”版本的转换器有什么意义?

更灵活?

提问于
用户回答回答于

mtl1.0有两个

newtype State s a = State { runState :: s -> (a, s) }

newtype StateT s m a = StateT { runStateT :: s -> m (a, s) }
用户回答回答于

来自文档:在计算上,没有理由使用Identity monad,而不是简单地将函数应用于其参数。身份monad的目的是它在monad变换器理论中的基础性作用。应用于Identity monad的任何monad变换器都会生成该monad的非变换版本。

据我了解,通过应用monad身份从monad变换器获得单变量的非变换版本正是monad身份的存在。使用非转换monad没有什么优势,但有时必须使用monad转换器,例如,当要使用的功能需要它时。

所属标签

可能回答问题的人

  • 人生的旅途

    10 粉丝484 提问6 回答
  • 无聊至极

    4 粉丝504 提问6 回答
  • 骑牛看晨曦

    5 粉丝522 提问5 回答
  • Richel

    8 粉丝0 提问4 回答

扫码关注云+社区

领取腾讯云代金券