Ich weiß, dass es in Haskell eine tolle Funktion namens Funktionszusammensetzung gibt, damit wir unseren Haskell Code pithier machen können, wie:
(f . g) x
anstelle von f (g x)
, foo x $ bar y z
anstelle von foo x (bar y z)
Aber ist es möglich, dass wir die Funktionszusammensetzung für foo (bar x) (bar y)
verwenden könnten?
ist es möglich, dass wir die Funktionszusammensetzung für
verwenden könntenfoo (bar x) (bar y)
@ilyavf hat eine Antwort für eine Funktionsdefinition gegeben, so dass (foo $.$ bar) x y
wie foo (bar x) (bar y)
wirkt. Und @jamshidh bietet an, dass es als on
in Data.Function existiert.
Beachten Sie jedoch die Typensignatur einer bestimmten Form:
%Vor% Als eine Funktion ist es jedoch "lustig" aufgrund einer Annahme, die es zu machen hat. Diese Annahme ist, dass beide Argumente von foo
vom selben Typ sind. (Wie könnte es sonst richtig sein, das Ergebnis von bar für beide zu verwenden?)
Die "angenehmere Form", in die Haskell gravitiert, führt nicht zum Sonderfall der Arbeit mit Funktionen, die zwei Argumente desselben Typs haben. Denn was ist das Besondere an 2? Viel interessanter ist "N", und wenn Ihre Funktion N Argumente des gleichen Typs annimmt, dann ist eine Liste schöner ... und kann beliebig mit einer Kartenoperation zusammengesetzt werden, die mit einer beliebigen Anzahl von Argumenten funktionieren kann:
foo [bar x, bar y]
= & gt; (foo . map bar) [x, y]
Sinnlose Äquivalenzen für \x y -> foo (bar x) (bar y)
:
Data.Function.Tacit (verwendet -XTypeApplications)
%Vor%Tags und Links haskell