如何阅读绑定运算符">> ="用语言?

时间:2017-04-07 06:24:32

标签: haskell monads

阅读代码时,我希望能够在脑海中形成句子。例如,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;对我来说似乎没什么意义。

3 个答案:

答案 0 :(得分:2)

其他语言的类似monad的构造的>>=的名称:

  • 对于Javascript promises,它是then。 (虽然不是完美的对应,因为then做了更多的事情。)
  • 对于Java OptionalsStreams,它是flatMap(它们是类似命名的函数,但它们不是来自同一个接口。)
  • 对于Java CompletableFuture,它是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)

我建议考虑“绑定”这个词。从gf的意义上来说,{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)