Fachkonzept - Currying
Eine neue Sichtweise
Eine Funktion mit mehreren Übergabeparametern kann man in eine Folge von Funktionen mit nur einem Übergabeparameter umwandeln. Man nennt diesen Vorgang Currying.
> String.replace "a" "u" "Hand"
"Hund" : String
> (String.replace "a" "u") "Hand"
"Hund" : String
> ((String.replace "a") "u") "Hand"
"Hund" : String
Das Black-Box-Diagramm verdeutlicht diese Sichtweise.
Partielle Funktionsanwendung
Wenn man bei einer Funktion mit mehreren Parametern nur einige dieser Parameter übergibt, so entstehen - passend zu der Sichtweise durch Currying - jeweils neue Funktionen. Diese Funktionen entstehen durch eine partielle Funktionsanwendung bei der Ausgangsfunktion.
> String.replace
<function> : String -> String -> String -> String
> String.replace "a"
<function> : String -> String -> String
> String.replace "a" "u"
<function> : String -> String
Nutzen partieller Funktionsanwendung
Partielle Funktionsanwendung wird häufig benutzt, wenn man eine Funktion mit mehreren Parametern nur in einer ganz speziellen Weise verwenden möchte. Die häufigste Art der Anwendung besteht darin nur den letzten Parameter auszulassen und die daraus resultierende Funktion, die nur noch einen Parameter erwartet, an eine Funktion wie List.map zu übergeben. Hier ein Beispiel:
> List.map (String.replace "a" "u") ["Hand","Rahm","Rate"]
["Hund","Ruhm","Rute"] : List String
Man kann aber auch Funktionen erzeugen, die mehrere Parameter erwarten, indem man mehrere Parameter beim Erzeugen der resultierenden Funktion weglässt:
> ersetzeA = String.replace "a"
<function> : String -> String -> String
> ersetzeA "e" "Banane"
"Benene" : String
> ersetzeA "u" "Banane"
"Bunune" : String