2012-12-01 15 views
6

Mam problem ze zrozumieniem symbol w Haskell:Symbole w Haskell

=<< 

jak w:

-- return the last ten lines of a file 
tail10 = drop =<< subtract 10 . length 

może ktoś mi wyjaśnić, co to oznacza?

Uważam, że dzieje się tak, gdy uczę się Haskella, że ​​wpadam na jeden z tych symboli Nie mam pojęcia, co one oznaczają i jak działają. Czy istnieje strona lub samouczek, który zawiera więcej szczegółów dotyczących tylko symboli w Haskell niż samych funkcji?

+2

Haskell pozwala na zdefiniowanie własnych operatorów infiksów, więc nie można ich gdzieś znaleźć. Możesz jednak wypróbować Hoogle - http://www.haskell.org/hoogle/?hoogle=%3D%3C%3C – Vitus

+1

Po prostu '>> =' z kolejnością odwróconych argumentów. – huon

+3

iw tym przypadku jest to monada funkcyjna '(r ->)', która dzieli argument na funkcje, gdzie '>> =' jest zdefiniowane jako '(f = = g) x = g (fx) x' , więc kod jest równoważny z "tail10 xs = drop ((odjąć 10. xs) xs'. – hammar

Odpowiedz

12

Here's a list of the reserved keywords in Haskell. Numer =<<, o który pytasz, jest jedynie funkcją, więc możemy ask Hoogle. It tells us że =<< jest po prostu >>= z odwróconymi argumentami. >>= to podstawowa funkcja monady ("monadyczna kompozycja"), o której można przeczytać w wielu miejscach, w tym LYAH.

+1

dziękuję, gspr, ta lista słów kluczowych jest dokładnie tym, czego szukałam: D – Donna

+0

Kiedy/jeśli hammar zapisuje swój komentarz jako odpowiedź, naprawdę powinieneś to zaakceptować. Właściwie * odpowiada * co 'drop = << odejmij 10. length' does, którego unikam. – gspr

+0

Być może "zastrzeżone słowo kluczowe" nie jest najlepszą charakterystyką = <<. Raport Haskella, rozdział 2.4 Identyfikatory i operatory, definiuje (między innymi leksemami) "reservedid" (case | class | data [i tak dalej]) i "reservedop" (.. | :: | = [i tak dalej]). >> = i = << nie są żadnymi z nich. Czym oni są? >> = jest metodą wyeksportowaną z Control.Monad (sekcja 13.1) i = << jest podstawową funkcją Monada (sekcja 13.2.2). – rickythesk8r