2016-01-12 4 views
6

Vielleicht ist dies nicht der richtige Ort zu fragen und vermutlich ist diese Frage zu "Meta", aber gibt es einen Grund, warum die <*> (und analog <$>) Funktion ist Infix? Nach meinem Verständnis und meiner Kenntnis (soweit) von Haskell tut es das gleiche wie fmap.Warum ist <*> eine Infix-Funktion in Haskell?

Also, warum ist fmap nicht Infix, aber seine Applicative und Functor-Variante sind?

+3

Jemand schrieb über '<$>', '<*>' und '= <<' alle Variationen der Funktionsanwendung. Es ist also hilfreich, ihnen eine vage ähnliche Syntax zu geben. Wie Cale Gibbard (glaube ich) sagte, ist es unglücklich, dass $ richtig assoziativ ist, während alle anderen Arten von Anwendungen assoziativ bleiben. – dfeuer

+1

Beachten Sie, dass '<*>' ist nicht das gleiche wie fmap: eher, '<$>' ist eigentlich ein Synonym für fmap, und '<*>' ist etwas, das ist * viel wie fmap *, aber ein bisschen anders. – amalloy

Antwort

13

Ich denke, es ist vor allem dieses Idiom motiviert ist:

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

mit Präfix Funktionen Dinkel es ist viel weniger hübsch, und Sie müssen wissen, wie viele Anwendungen gibt es einfach mit der Eingabe beginnen:

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

Obwohl man natürlich noch '' f 'fmap' x' ap' y 'ap' z'' schreiben könnte. – leftaroundabout

+10

@leftaroundabout Sicher. Und wenn Sie dies die ganze Zeit tun, können Sie auch Funktionsnamen wählen, die infix verwendet werden können. –

+0

Es ist auch erwähnenswert, dass "<*>" eine stärkere Spezifikation als "ap" hat, da es auf allen Applicatives funktioniert und daher alle Monaden, aber "ap" nur auf Monaden funktioniert. – semicolon

Verwandte Themen