2016-02-02 2 views
4

Я читал purescript wiki и нашел следующий раздел, который объясняет do с точки зрения >>=.Что значит >> = означает в purescript?

Что означает >>= означает?

Do нотация

Д.О. ключевое слово вводит простой синтаксический сахар для монадических выражений.

Ниже приведен пример, используя монаду для 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.

При использовании обозначений должно быть соответствующее значение экземпляра класса типа Monad для возвращаемого типа. Заявления могут иметь следующий вид:

  • a <- x который desugars к x >>= \a -> ...
  • x который desugars к x >>= \_ -> ... или просто х, если это последнее утверждение.
  • Разрешено связывание 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. Вы можете найти определения модуля Prelude в this link, найденные в Pursuit package index.

Это тесно связано с классом типа Monad в Haskell, что немного легче найти ресурсы. В этой концепции есть famous question on SO, что является хорошей отправной точкой, если вы хотите улучшить свои знания о функции привязки (если вы сейчас начинаете функционировать, вы можете пропустить ее на некоторое время).

Смежные вопросы