Neulich bin ich auf einen Operator namens -<
gestoßen, der im Zusammenhang mit der Bindung eines Wertes an eine Variable in einer Monade auftaucht; Insbesondere sieht es so aus, als übergibt es einen Wert an eine Funktion, die dann einer Variablen zugewiesen (und möglicherweise ausgewertet?) wird, die im Bereich einer Monade existiert.
Beispielverwendung:
%Vor% Ein paar Fragen dazu: Zuerst mal, wie heißt es? Der Betreiber selbst ist nicht googlefähig (Google mag <
oder >
nicht), und der eine Name, den ich gefunden habe, " arrow application ", verweist normalerweise auf die andere Art von Arrow
in Haskell , die scheint nicht verwandt.
Zweitens: Warum wird dieser Operator in den meisten Lernressourcen nicht erklärt? Weder die "Sanfte Einführung in die Monaden" noch LYAH geben es so sehr wie eine vorübergehende Erwähnung, und die meisten Listen von Haskell-Operatoren verzichten auch darauf. (Ist es eine schlechte Praxis?)
Schließlich entspricht das der Verwendung von Klammern, wie in (myVar <- f -< x) == (myVar <- (f x))
? Oder ist es mehr wie mit let myVar = (f x)
? In jedem Fall, wenn dies so verwendet wird, warum -<
über Parens oder $
?
Ja, das ist die gleiche Art von Pfeil. Es gibt eine Zuckersyntax für Pfeile, genauso wie es eine Zuckersyntax für Monaden gibt. Sie können Google nicht für die Suche nach -<
verwenden, aber Sie können Hoogle verwenden.
Siehe: GHC-Sprachfunktionen , Arrow-Tutorial .
Die Arrow-Syntax ist in der Tat schlecht dokumentiert. Der Grund, dass Sie $
anstelle von -<
nicht verwenden können, ist, dass -<
einen reinen Wert in den Pfeil einfügt, aber ->
ist nur ein Beispiel für einen Pfeil. % Co_de% funktioniert also gut, wenn dein Pfeil $
ist. Es gibt auch monadische Pfeile (der ->
-Konstruktor erzeugt diese) und Sie können Ihre eigenen Pfeile erstellen, und in diesen Fällen ist Kleisli
anders.