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