2016-01-12 2 views
6

Być może nie jest to właściwe miejsce do zadawania pytań i prawdopodobnie to pytanie jest zbyt "meta", ale czy jest jakiś powód, dla którego funkcja <*> (i analogicznie <$>) jest infiks? Do mojego zrozumienia i mojej wiedzy (do tej pory) Haskella robi to tak samo, jak fmap.Dlaczego jest <*> funkcja infiks w Haskell?

Dlaczego więc fmap nie infix, ale jego wariantem jest Applicative i Functor?

+3

Ktoś lub inny napisał o '<$>', '<*>', i '= <<' wszystkie są odmianami aplikacji funkcji. Dlatego pomocne jest nadanie im wszystkich mało podobnej składni. Jak powiedział Cale Gibbard (jak sądzę), niefortunne jest to, że '$' jest prawostronne, podczas gdy wszystkie inne rodzaje aplikacji pozostają asocjatywne. – dfeuer

+1

Zauważ, że '<*>' nie jest tym samym co fmap: raczej, '<$>' jest w rzeczywistości synonimem fmap, a '<*>' jest czymś, co jest * bardzo podobne do fmap *, ale nieco inne. – amalloy

Odpowiedz

13

Myślę, że to głównie motywowane tego idiomu:

f <$> x <*> y <*> z 

Orkisz z funkcji prefiksu To dużo mniej ładna, a trzeba wiedzieć, ile wnioski nie są po prostu zacznij pisać:

ap (ap (fmap f x) y) z 
+3

Chociaż można oczywiście nadal pisać '' f 'fmap' x' ap'y 'ap' z''. – leftaroundabout

+10

@leftaroundabout Pewnie. A jeśli zamierzasz robić to cały czas, równie dobrze możesz wybrać nazwy funkcji, które mogą być używane do infiksowania. –

+0

Warto również nadmienić, że '<*>' ma silniejszą specyfikację niż 'ap', ponieważ działa na wszystkich Aplikacjach, a więc wszystkich Monadach, ale' ap' działa tylko na Monadach. – semicolon