2010-02-27 14 views
8

Czytałem Guestbook example dla Happstack i zauważyłem symbol >>, którego nie widziałem wcześniej w podręcznikach, których uczyłem się uczyć Haskella (na przykład patrz wiersz 23). Co to jest?Co oznacza symbol >> w Haskell

Nie mogłem go znaleźć w Google, ponieważ całkowicie ignoruje >> (Bing nie zawiera, ale daje mnóstwo niepowiązanych wyników).

+2

hoogle (i hayoo wymienionych poniżej) są najlepszym sposobem wyszukiwanie przy użyciu składni haskell http://www.haskell.org/hoogle/?hoogle=%3E%3E – Keith

+0

Istnieje również Google Wyszukiwanie kodu, które jest ogólnie dobre w takich przypadkach, chociaż może nie być najlepsze w tym konkretnym przypadku: http://google.com/codesearch?q=lang%3Ahaskell+%3E%3E&hl=en&btnG=Search+Code – MatrixFrog

Odpowiedz

10

W wierszu polecenia ghci, można wpisać:

:info >> 

I uzyskać wynik jak:

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

Stamtąd można po prostu spojrzeć na kod źródłowy, aby dowiedzieć się więcej .

I właśnie ze względu na odpowiadając na pytanie:

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

Teraz czuję się głupio; Wiem o poleceniu: i (info), ale pochodzę z Java i PHP i wciąż przyzwyczajam się do używania REPL do wszystkiego. Dzięki – CharlesS

+5

Prawidłowe, ale ledwo pomocne dla początkujących Haskell. Dlaczego to istnieje? Do czego jest przydatny? +0. –

+1

To wystarczy mi, aby dowiedzieć się, gdzie szukać; Nie miałem wcześniej żadnej wskazówki. – CharlesS

14

Hayoo uznaje ten rodzaj operatora: http://holumbus.fh-wedel.de/hayoo/hayoo.html

(>>) jest jak (>>=), że sekwencje to dwie akcje, z wyjątkiem, że ignoruje wynik z pierwszego.

+0

Dlaczego downvote? –

+0

Dzięki za ten link! Bardzo przydatne. Awansuj. – CharlesS

+1

Najlepsze mistrzowskie mistrzostwo walki pięściami: Hoogle vs. Hayoo! –

1

nie jestem ekspertem Haskell, ale >> jest operatorem, który jest używany do pracy z monad, które stanowią niezwykłą cechą, że (wśród wielu inne rzeczy) umożliwiają programowanie w stylu imperatywnym w Haskell. Istnieje wiele tutoriali dostępnych na temat monad; here's one good one.

Zasadniczo a >> b można czytać jak „nie a następnie zrobić b, i zwrócić wynik b”. Jest podobny do bardziej powszechnego operatora powiązań. >>=.

+6

Nie można udzielić odpowiedzi na pytanie "które są trudne do zrozumienia". Wydaje mi się, że ustawia czytelnika na porażkę. –

+0

Wystarczająco fair. Są teraz "niezwykłą cechą", zamiast "być trudnymi do zrozumienia". –

+0

"Funkcja nietypowa" to wywołanie funkcji i przekazanie wyniku do innej funkcji? OK ... – jrockway

8

się na do notacji

a >> b >> c >> d 

odpowiada

do a 
    b 
    c 
    d 

(podobnie a >>= (b >>= (c >>= d)) odpowiada

do r1 <- a 
    r2 <- b r1 
    r3 <- c r2 
    d r3