5

我正在阅读purescript wiki,发现以下部分do>>=.

是什么>>=意思?

做符号

do 关键字为一元表达式引入了简单的语法糖。

这是一个示例,使用 monad 作为Maybe类型:

 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 表示法时,返回类型必须有对应的 Monad 类型类实例。语句可以有以下形式:

  • a <- x哪个脱糖x >>= \a -> ...
  • xx >>= \_ -> ...如果这是最后一个语句,则它对或只是 x 脱糖。
  • 一个 let 绑定let a = x。请注意缺少in关键字。

示例maybeSum desugars to::

 maybeSum a b =
   a >>= \n ->
     b >>= \m ->
       let result = n + m
       in return result
4

1 回答 1

8

>>=是一个函数,仅此而已。它位于 Prelude 模块中并具有 type ,是类型类函数的(>>=) :: forall m a b. (Bind m) => m a -> (a -> m b) -> m b别名。您可以在此链接中找到Prelude 模块的定义,该链接位于Pursuit 包索引中。bindBind

这与 Haskell 中的类型类密切相关Monad,它更容易找到资源。关于这个概念有一个关于 SO 的著名问题,如果您想提高对绑定函数的了解,这是一个很好的起点(如果您现在开始进行函数式编程,您可以暂时跳过它)。

于 2016-02-02T05:41:34.993 回答