const
Mö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 a
das erste Element des ersten Elements ist und was fst.fst
Projekte sind. Beachten Sie, wie c
das erste Element des zweiten Elements ist und was fst.snd
Projekte sind. Das heißt, Variablen werden zum Pfad zu ihrer Quelle.
const
erlaubt 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 const
spielt 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 -> Color
ist für michbackgroundColor = const White