2016-02-02 130 views
4

我正在阅读purescript wiki,发现以下部分解释了do根据>>=>> = purescript中的意思是什么?

>>=是什么意思?

待办事项符号

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

下面是一个例子,使用该单子为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 notation时,返回类型必须有相应的Monad类型的 实例。语句可以 有以下形式:

  • a <- x这desugars到x >>= \a -> ...
  • x这desugars到x >>= \_ -> ...或只是x如果这是最后一个发言。
  • A let binding let a = x。请注意缺少关键字in

的例子maybeSum desugars to ::

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

回答

6

>>=是一个功能,仅此而已。它驻留在Prelude模块中,其类型为(>>=) :: forall m a b. (Bind m) => m a -> (a -> m b) -> m b,是Bind类型类的bind函数的别名。您可以在this linkPursuit package index中找到Prelude模块的定义。

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