Что означает символ >> на Хаскеле - PullRequest
8 голосов
/ 27 февраля 2010

Я читал пример гостевой книги для Happstack и заметил символ >>, которого я не видел ранее в учебниках, которые я изучал, чтобы изучать Haskell (например, см. Строку 23).Что это?

Я не смог найти его в Google, потому что он полностью игнорирует >> (Bing этого не делает, но выдает множество несвязанных результатов).

Ответы [ 4 ]

15 голосов
/ 27 февраля 2010

Hayoo распознает этот тип оператора: http://holumbus.fh -wedel.de / hayoo / hayoo.html

(>>) похоже на (>>=) в том смысле, что оно выполняет два действия, за исключением того, что игнорирует результат первого.

11 голосов
/ 21 марта 2010

В нотации

a >> b >> c >> d

эквивалентно

do a
   b
   c
   d

(и аналогично a >>= (b >>= (c >>= d)) эквивалентно

do r1 <- a
   r2 <- b r1
   r3 <- c r2
   d r3
10 голосов
/ 27 февраля 2010

В командной строке ghci вы можете ввести:

:info >>

И получите результат как:

class Monad m where
...
(>>) :: m a -> m b -> m b
...
        -- Defined in GHC.Base
infixl 1 >>

Оттуда вы можете просто взглянуть на исходный код, чтобы узнать больше.

И просто ради ответа на ваш вопрос:

k >> f = k >>= \_ -> f
1 голос
/ 27 февраля 2010

Я не эксперт по Haskell, но >> - это оператор, который используется для работы с монадами, что является необычной функцией, которая (среди многих других) позволяет программировать в императивном стиле в Haskell. Есть много учебных пособий по монадам; вот один хороший .

По сути, a >> b можно прочитать как "do a, затем do b и возврат результата b". Это похоже на более распространенный оператор связывания >>=.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...