/ / Haskell-Notation für das Zusammenstellen von zwei Funktionen f und g, wobei g mehrere Argumente akzeptiert - Hash, Operatoren, Variadic-Funktionen, Currying, Funktionszusammenstellung

Haskell-Notation für das Zusammensetzen zweier Funktionen f und g, wobei g mehrere Argumente annimmt - Haskell, Operatoren, Variadic-Funktionen, Curry, Funktionszusammensetzung

Oft möchte ich zwei Funktionen zusammenstellen. Fund g, aber g nimmt mehrere Argumente. Bietet Haskell eine Reihe von Operatoren dafür an?

dh so etwas

(.@) = (.)
(.@@) f g x1 x2 = f $ g x1 x2
(.@@@) f g x1 x2 x3 = f $ g x1 x2 x3
(.@@@@) f g x1 x2 x3 x4 = f $ g x1 x2 x3 x4
...

bis zu einer angemessenen Anzahl von Argumenten

Antworten:

6 für die Antwort № 1

Ich weiß, dass Sie die gewünschte Antwort erhalten haben, aber ich wollte darauf hinweisen, dass diese Kombinatoren die folgende nette Umsetzung haben:

(.:)   = (.) . (.)
(.:.)  = (.) . (.) . (.)
(.::)  = (.) . (.) . (.) . (.)
(.::.) = (.) . (.) . (.) . (.) . (.)

und wenn Sie sie nur vollständig angewendet brauchen:

f .: g   = (f .) . g
f .:. g  = ((f .) .) . g
f .:: g  = (((f .) .) .) . g
f .::. g = ((((f .) .) .) .) . g

Es scheint nicht so schlimm zu sein, diese Ausdrücke direkt zu verwenden, ohne einen Operator zu definieren. Zumindest der erste, (f .) . gscheint mir lesbar genug.


5 für die Antwort № 2

Nach dem Kommentar von @bheklilr ist die Antwort, die ich gesucht habe, in der Kompositionsbibliothek: http://hackage.haskell.org/package/composition-1.0.1.0/docs/Data-Composition.html

Die Funktionen (. :), (.:.), (.: :), (. ::.) Usw. machen genau das, was ich dachte