Что означает символ >> в Хаскеле

Я читал пример Гостевой книги для 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"Это похоже на более распространенный оператор связывания >>=,

Другие вопросы по тегам