2016-02-02 169 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,如果你想提高你對綁定函數的知識(如果你現在開始進行函數式編程,你可以跳過它一段時間),這是一個很好的起點。