在purescript中>> =表示什么?

时间:2016-02-02 05:08:59

标签: purescript

我正在阅读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

1 个答案:

答案 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,如果您正在寻求提高您对绑定功能的了解,那么这是一个很好的起点(如果您现在开始使用函数式编程,那么您可以跳过它一段时间。)