我正在阅读purescript wiki,并在do
方面找到了解释>>=
的部分。
>>=
是什么意思?
注释
do关键字为monadic引入了简单的语法糖 表达式。
以下是一个示例,使用
Maybe
类型的monad:maybeSum :: Maybe Number -> Maybe Number -> Maybe Number maybeSum a b = do n <- a m <- b let result = n + m return result
maybeSum
需要两个 类型Maybe Number
的值,如果两个数字都不是,则返回它们的总和Nothing
。使用do notation时,必须有相应的 返回类型的Monad类型的实例。声明可以 有以下形式:
a <- x
去了x >>= \a -> ...
x
如果这是最后一个语句,则会去掉x >>= \_ -> ...
或只是x。- 让绑定
let a = x
。请注意缺少in
关键字。示例
maybeSum desugars to
::maybeSum a b = a >>= \n -> b >>= \m -> let result = n + m in return result
答案 0 :(得分:7)
>>=
是一个功能,仅此而已。它驻留在Prelude模块中,类型为(>>=) :: forall m a b. (Bind m) => m a -> (a -> m b) -> m b
,是bind
类型类Bind
函数的别名。您可以在this link中的Pursuit package index中找到Prelude模块的定义。
这与Haskell中的Monad
类型密切相关,它更容易找到资源。关于这个概念,有一个famous question on SO,如果您正在寻求提高您对绑定功能的了解,那么这是一个很好的起点(如果您现在开始使用函数式编程,那么您可以跳过它一段时间。)