阅读代码时,我希望能够在脑海中形成句子。例如,x <- getChar
可能类似于&#34; x slurps getChar&#34;。或a . b
将&#34; b应用于&#34;。
但是当谈到Monadic Bind算子f >>= g
时,我只是在脑海中留下一个精神缺口,因为我不知道如何阅读它。
我想过&#34; f绑定g&#34;但是这感觉不对。你有什么建议?
建议的重复链接包含其他运算符的一些非常好的答案,但对于绑定运算符,答案只是说&#34; bind&#34;。然而,&#34; f绑定g&#34;对我来说似乎没什么意义。
答案 0 :(得分:2)
其他语言的类似monad的构造的>>=
的名称:
then
。 (虽然不是完美的对应,因为then
做了更多的事情。)flatMap
(它们是类似命名的函数,但它们不是来自同一个接口。)thenComposeAsync
。 >>=
相当于首先使用有效函数进行映射
fmap putStrLn getLine :: IO (IO ())
然后&#34;融合&#34;具有join :: Monad m => m (m a) -> m a
的类型构造函数的两个嵌套层:
join (fmap putStrLn getLine) :: IO ()
那么如何调用它&#34; map&#39; n fuse&#34;?
答案 1 :(得分:1)
我建议考虑“绑定”这个词。从g
到f
的意义上来说,{em>将附加 monadic动作g
添加到monad f
。为了充实这一点,可以考虑f
,一个monad,作为一个计算,当运行时,它将返回一些值(调用此值x
)。将monadic动作g
绑定到monad f
表示一个新的计算,其中monadic动作g
现在附加到monad f
,在某种意义上,monadic计算x
的结果(f
)将作为参数传递给动作g
,后者又返回一个新的(monadic)计算。
答案 2 :(得分:1)
榆树使用的andThen
相当于>>=
makeThingA >>= (\a -> consumeThing a)
又名
makeThingA `andThen` (\a -> consumeThing a)