什么是monad命名约定?

Eri*_*ikR 14 monads haskell

似乎Haskell已经围绕monad建立了几个命名约定.

例子:

  • 追加T到最后获得monad变压器的名称(例如Reader- > ReaderT)
  • 使用runXXX以执行单子计算(例如runST,runReader)
  • liftXXX 对于各种价值观 XXX

还有其他命名约定吗?

Tho*_*son 14

  • runX m这里m :: X a将运行X单子并与单子结果一起返回了"副作用", a.

  • evalX m将运行计算并返回结果a.

  • execX m 将运行计算并返回"副作用"但不返回结果.

  • 升降机有各种各样的风格,对于我来说,想要在SO答案中解释它们可能有点太棘手.您可能应该知道lift并且liftIO意识到/最终寻找其他变体,例如liftWithliftBaseWith.例如,请参阅EZYang关于该主题的帖子.

  • T在monad名称后附加一个暗示变换器.M在函数名后附加意味着它是monadic.附加_意味着忽略结果.

  • 所有其他后缀字母均表示"使用hoogle".

  • 作为简短的附录http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Monad.html#g:2描述了关于何时M后缀的一些组合子命名约定与m前缀相对应是合适的. (8认同)