Что означает символ >> в Haskell
Я читал Пример гостевой книги для Happstack и заметил символ >>
, который я раньше не видел в учебниках, которые я изучал, изучите Haskell (например, см. строку 23). Что это?
Я не мог найти его в Google, потому что он полностью игнорирует >>
(Bing не придумывает множество не связанных результатов).
Ответы
Ответ 1
В командной строке ghci вы можете ввести:
:info >>
И получите результат вроде:
class Monad m where
...
(>>) :: m a -> m b -> m b
...
-- Defined in GHC.Base
infixl 1 >>
Оттуда вы можете просто взглянуть на исходный код, чтобы узнать больше.
И только ради ответа на ваш вопрос:
k >> f = k >>= \_ -> f
Ответ 2
Hayoo распознает такой тип оператора: http://holumbus.fh-wedel.de/hayoo/hayoo.html
(>>)
похож на (>>=)
, поскольку он последовательно выполняет два действия, за исключением того, что он игнорирует результат из первого.
Ответ 3
В do-notation
a >> b >> c >> d
эквивалентно
do a
b
c
d
(и аналогично a >>= (b >>= (c >>= d))
эквивалентно
do r1 <- a
r2 <- b r1
r3 <- c r2
d r3
Ответ 4
Я не эксперт Haskell, но >>
- это оператор, который используется для работы с монадами, что является необычной особенностью, которая (среди многих других) позволяет программировать в Haskell. На монадах доступно много учебников; здесь один хороший.
По существу, a >> b
можно прочитать как "do a
, затем сделать b
и вернуть результат b
". Он похож на более общий оператор связывания >>=
.