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 № 1Ich 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 .) . g
scheint 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