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