在purescript中>> =意味着什么?

Nig*_*rne 5 purescript

我正在读purescript维基,发现下面的章节这也解释了do在以下方面>>=.

什么>>=意思?

记谱法

do关键字为monadic表达式引入了简单的语法糖.

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

 maybeSum :: Maybe Number -> Maybe Number -> Maybe Number 
 maybeSum a b = do   
     n <- a
     m <- b   
     let result = n + m   
     return result 
Run Code Online (Sandbox Code Playgroud)

maybeSum取两个值类型Maybe Number,如果两个数字都不是,则返回它们的总和 Nothing.

使用do表示法时,返回类型必须有Monad类型的相应实例.声明可以采用以下形式:

  • a <- x 不好意思 x >>= \a -> ...
  • xx >>= \_ -> ...如果这是最后一个陈述,那就是去掉或者只是x.
  • 一个让绑定let a = x.注意缺少in关键字.

例子maybeSum desugars to::

 maybeSum a b =
   a >>= \n ->
     b >>= \m ->
       let result = n + m
       in return result
Run Code Online (Sandbox Code Playgroud)

Mep*_*phy 7

>>=是一个功能,仅此而已.它驻留在Prelude模块中,并且具有type (>>=) :: forall m a b. (Bind m) => m a -> (a -> m b) -> m b,作为类型类bind函数的别名Bind.您可以在此链接中找到Prelude模块的定义,可在Pursuit包索引中找到.

这与MonadHaskell中的类型类密切相关,它更容易找到资源.关于这个概念有一个关于SO的着名问题,如果你想提高你对绑定函数的知识,那么这是一个很好的起点(如果你现在开始进行函数式编程,你可以跳过它一段时间).