如何阅读文字中的绑定运算符“>>=”?
How to read the bind operator ">>=" in words?
阅读代码时,我喜欢在脑海中形成句子。例如,x <- getChar
可能类似于 "x slurps getChar"。或者 a . b
将是 "b applied to a".
但是说到Monadic Bind运算符f >>= g
,我只是在脑子里的句子中留下了一个心理空白,因为我不知道怎么读。
我想过 "f binds g",但感觉不对。你有什么建议?
提议的副本 link 包含一些对其他运算符非常好的答案,但对于绑定运算符,答案只是 "bind"。但是,"f bind g" 对我来说似乎没有意义。
>>=
其他语言类 monad 构造的名称:
- 对于Java脚本promises,它是
then
。 (虽然不是完美对应,因为 then
做的事情更多。)
- 对于JavaOptionals and Streams,是
flatMap
(它们是类似命名的函数,但它们不是来自同一个接口。)
- 对于Java的CompletableFuture,是
thenComposeAsync
。
>>=
相当于先映射一个有效函数
fmap putStrLn getLine :: IO (IO ())
然后 "fusing" 类型构造函数的两个嵌套层 join :: Monad m => m (m a) -> m a
:
join (fmap putStrLn getLine) :: IO ()
那么叫它"map 'n fuse"怎么样?
我建议从 'attach' 的意义上思考 'bind' 一词:将 g
绑定到 f
意味着 附加 单子动作 g
到单子 f
。为了充实一点,将 f
,一个 monad,想象成一个计算,当 运行 时,将 return 一些值(称这个值为 x
)。将 monadic 动作 g
绑定到 monad f
表示一个新的计算,其中 monadic 动作 g
现在 附加 到 monad f
,在某种意义上,一元计算 f
的结果 (x
) 将作为参数传递给操作 g
,而操作 return这是一个新的(单子)计算。
Elm 使用 andThen
相当于 >>=
makeThingA >>= (\a -> consumeThing a)
又名
makeThingA `andThen` (\a -> consumeThing a)
阅读代码时,我喜欢在脑海中形成句子。例如,x <- getChar
可能类似于 "x slurps getChar"。或者 a . b
将是 "b applied to a".
但是说到Monadic Bind运算符f >>= g
,我只是在脑子里的句子中留下了一个心理空白,因为我不知道怎么读。
我想过 "f binds g",但感觉不对。你有什么建议?
提议的副本 link 包含一些对其他运算符非常好的答案,但对于绑定运算符,答案只是 "bind"。但是,"f bind g" 对我来说似乎没有意义。
>>=
其他语言类 monad 构造的名称:
- 对于Java脚本promises,它是
then
。 (虽然不是完美对应,因为then
做的事情更多。) - 对于JavaOptionals and Streams,是
flatMap
(它们是类似命名的函数,但它们不是来自同一个接口。) - 对于Java的CompletableFuture,是
thenComposeAsync
。
>>=
相当于先映射一个有效函数
fmap putStrLn getLine :: IO (IO ())
然后 "fusing" 类型构造函数的两个嵌套层 join :: Monad m => m (m a) -> m a
:
join (fmap putStrLn getLine) :: IO ()
那么叫它"map 'n fuse"怎么样?
我建议从 'attach' 的意义上思考 'bind' 一词:将 g
绑定到 f
意味着 附加 单子动作 g
到单子 f
。为了充实一点,将 f
,一个 monad,想象成一个计算,当 运行 时,将 return 一些值(称这个值为 x
)。将 monadic 动作 g
绑定到 monad f
表示一个新的计算,其中 monadic 动作 g
现在 附加 到 monad f
,在某种意义上,一元计算 f
的结果 (x
) 将作为参数传递给操作 g
,而操作 return这是一个新的(单子)计算。
Elm 使用 andThen
相当于 >>=
makeThingA >>= (\a -> consumeThing a)
又名
makeThingA `andThen` (\a -> consumeThing a)