Монады: в чем разница между seq и >> =? - PullRequest
2 голосов
/ 27 июля 2011

Какая разница? seq гарантирует больше условий потока?

Ответы [ 2 ]

15 голосов
/ 27 июля 2011

Они вообще не связаны.

seq имеет тип:

seq :: a -> b -> b

Используется (как seq a b или a `seq` b) для оценки a, чтобы возглавить нормальную форму, что является странным способом сказать, что оно заставляет ленивое значение a быть немного оцененным.Это не имеет ничего общего с монадами.

>>= - для секвенирования монад.Он имеет тип:

(>>=) :: Monad m => m a -> (a -> m b) -> m b

Он используется для получения значения из монадического значения и передачи его функции, которая возвращает другое монадическое значение.По сути, что-то вроде:

getLine >>= putStrLn

, который получит строку ввода из командной строки, а затем выведет ее на печать.

Так что, по сути, никакого отношения вообще нет.

2 голосов
/ 27 июля 2011

seq не относится к монадам. seq используется для принудительного вычисления его первого аргумента перед его возвращением.

...