13
Haskell似乎已经围绕单子建立了几个命名约定。monad命名约定是什么?
实例:
- 附加
T
到结束以获得单子变压器的名称 - 使用runXXX
执行单子计算(例如Reader
>ReaderT
) - (例如
runST
,runReader
) liftXXX
各种数值的XXX
是否有其他命名约定?
Haskell似乎已经围绕单子建立了几个命名约定。monad命名约定是什么?
实例:
T
到结束以获得单子变压器的名称 - 使用runXXX
执行单子计算(例如Reader
>ReaderT
)runST
,runReader
)liftXXX
各种数值的XXX
是否有其他命名约定?
runX m
其中m :: X a
将运行X
单子,并返回与单子结果,a
沿着“副作用”。
evalX m
将运行计算并返回结果a
。
execX m
将运行计算并返回“副作用”而不是结果。
电梯有各种口味,对我来说可能有点棘手,想要在SO回答中解释它们。您应该可能知道lift
和liftIO
,并知道/最终找出其他变体,如liftWith
和liftBaseWith
。例如,请参阅EZYang发布的主题。
在monad名称隐含变换后追加T
。在函数名称后面附加M
意味着它是一次性的。附加_
意味着结果被忽略。
所有其他的后缀字母表示“使用hoogle”。
作为短编http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Monad.html#g:2介绍几个与组合子的命名规则关于什么时候M后缀与m前缀相对应是合适的。 – 2012-02-27 05:22:48