constMöglicherweise ist dies nur die Implementierung, nach der Sie in Verbindung mit anderen Funktionen suchen. Hier ist ein Beispiel, das ich entdeckt habe.
Angenommen, wir möchten eine Struktur von 2-Tupeln in eine andere Struktur von 2-Tupeln umschreiben. Ich könnte dies so ausdrücken:
((a,b),(c,d)) ⇒ (a,(c,(5,a)))
Ich kann eine einfache Definition mit Mustervergleich geben:
f ((a,b),(c,d)) = (a,(c,(5,a)))
Was ist, wenn ich eine sinnlose (stillschweigende) Lösung für diese Art von Umschreibungen möchte? Einige denken und fummeln später, die Antwort ist, dass wir alle Umschreibungen mit ausdrücken können (&&&), const, (.), fst, snd. Beachten Sie, dass von (&&&)istControl.Arrow .
Die Lösung des Beispiels mit diesen Funktionen lautet:
(fst.fst &&& (fst.snd &&& (const 5 &&& fst.fst)))
Beachten Sie die Ähnlichkeit mit (a,(c,(5,a))). Was passiert , wenn wir ersetzen &&&mit ,? Dann heißt es:
(fst.fst, (fst.snd, (const 5, fst.fst)))
Beachten Sie, wie adas erste Element des ersten Elements ist und was fst.fstProjekte sind. Beachten Sie, wie cdas erste Element des zweiten Elements ist und was fst.sndProjekte sind. Das heißt, Variablen werden zum Pfad zu ihrer Quelle.
consterlaubt uns, Konstanten einzuführen. Interessant, wie der Name mit der Bedeutung übereinstimmt!
Ich habe dann diese Idee mit Applicative verallgemeinert , so dass Sie jede Funktion in einem sinnlosen Stil schreiben kann (so lange , wie Sie als Funktionen Fallanalyse zur Verfügung haben, wie maybe, either, bool). Wieder constspielt die Rolle der Einführung von Konstanten. Sie können diese Arbeit im Data.Function.Tacit- Paket sehen.
Wenn Sie abstrakt am Ziel beginnen und dann auf eine Implementierung hinarbeiten, können Sie von den Antworten überrascht sein. Das heißt, jede Funktion kann so mysteriös sein wie jedes Zahnrad in einer Maschine. Wenn Sie sich jedoch zurückziehen, um die gesamte Maschine sichtbar zu machen, können Sie den Kontext verstehen, in dem dieses Zahnrad erforderlich ist.
backgroundColor :: Text -> Colorist für michbackgroundColor = const White