2010-02-27 5 views
8

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

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

+2

hoogle (и hayoo упомянутый ниже) лучший способ поиск с использованием синтаксиса haskell http://www.haskell.org/hoogle/?hoogle=%3E%3E – Keith

+0

Существует также Google Поиск кода, который обычно подходит для таких случаев, хотя это может быть не лучшим для этого конкретного случая: http://google.com/codesearch?q=lang%3Ahaskell+%3E%3E&hl=ru&btnG=Search+Code – MatrixFrog

ответ

10

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

:info >> 

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

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

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

И только ради ответа на свой вопрос:

k >> f = k >>= \_ -> f 
+1

Теперь я чувствую себя глупо; Я знаю о команде: i (info), но я родом из Java и PHP и все еще привыкаю использовать REPL для всего. Спасибо – CharlesS

+5

Правильно, но едва полезно для новичков Haskell. Почему он существует? Для чего это полезно? +0. –

+1

Этого достаточно, чтобы узнать, где искать; Раньше я понятия не имел. – CharlesS

14

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

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

+0

Почему downvote? –

+0

Спасибо за эту ссылку! Очень полезно. Upvote. – CharlesS

+1

Окончательный кулачный чемпионат dukeout: Hoogle против Hayoo! –

1

Я не эксперт Haskell, но >> является оператором, который используется для работы с монадами, которые необычная особенность, которая (среди многих другие вещи) позволяют программировать в стиле Haskell. На монадах доступно много учебников; here's one good one.

По существу, a >> b можно читать как «делать a затем сделать b, и возвращает результат b». Он похож на более общий оператор связывания >>=.

+6

Ответ на вопрос «что трудно понять» не уточняет. Думаю, это заставляет читателя за неудачу. –

+0

Достаточно честный. Теперь они являются «необычной особенностью», а не «трудными для понимания вещами». –

+0

Это «необычная функция», чтобы вызвать функцию и передать результат другой функции? OK ... – jrockway

8

В сделай нотации

a >> b >> c >> d 

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

do a 
    b 
    c 
    d 

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

do r1 <- a 
    r2 <- b r1 
    r3 <- c r2 
    d r3 
Смежные вопросы