2015-05-16 11 views
8

Neulich stieß ich auf einen Operator, -<, der im Zusammenhang mit der Bindung eines Wertes an eine Variable in einer Monade erscheint; Insbesondere sieht es so aus, als übergebe es einen Wert an eine Funktion, die dann einer Variablen zugewiesen (und möglicherweise ausgewertet?) wird, die im Bereich einer Monade existiert.Was zum Teufel ist "- <", wie auch immer?

Beispiel Nutzung:

myMonad = do 
    myVar <- f -< x 

Ein paar Fragen dazu: zunächst einmal, was heißt es? Der Betreiber selbst ist nicht googlefähig (Google mag keine < oder >), und der eine Name, den ich gefunden habe, "arrow application", verweist normalerweise auf the other kind of Arrow present in Haskell, was nicht verwandt scheint.

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 als schlechte Praxis betrachtet?)

Schließlich entspricht dies der Verwendung von Klammern, wie in, (myVar <- f -< x) == (myVar <- (f x))? Oder ist es eher wie let myVar = (f x) zu verwenden? In jedem Fall, wenn dies ist, wie es verwendet wird, warum -< über Parens oder $ verwenden?

+1

bei der Suche nach Symbolen, [hoogle] (https://www.haskell.org/hoogle/?hoogle=-%3C) und [hayoo] (http://hayoo.fh-wedel.de/?query) = -% 3C) sind deine Freunde. – rampion

Antwort

16

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 verwenden, um nach -< zu suchen, aber Sie können Hoogle verwenden.

Siehe: GHC Language Features, Arrow tutorial.

Arrow-Syntax ist in der Tat schlecht dokumentiert. Der Grund, dass Sie nicht $ anstelle von -< verwenden können, ist, dass -< einen reinen Wert in den Pfeil injiziert, aber -> ist nur ein Beispiel für einen Pfeil. Also, $ funktioniert gut, wenn Ihr Pfeil -> ist. Es gibt auch monadische Pfeile (der Kleisli Konstruktor erstellt diese) und Sie können Ihre eigenen Pfeile erstellen, und in diesen Fällen ist -< anders.

Verwandte Themen