2015-05-16 13 views
8

L'altro giorno mi sono imbattuto in un operatore, -<, che appare nel contesto del collegamento di un valore a una variabile in una monade; in particolare, sembra che questo passi un valore a una funzione che viene quindi assegnata (e possibilmente valutata?) a una variabile esistente nell'ambito di una monade.Che diamine è "- <", comunque?

Esempio utilizzo:

myMonad = do 
    myVar <- f -< x 

Alcune domande su questo: Prima di tutto, come si chiama? L'operatore stesso non è googabile (a Google non piace < o >) e l'unico nome che ho trovato, "arrow application", in genere collega a the other kind of Arrow present in Haskell, che sembra non correlato.

In secondo luogo, perché questo operatore non è spiegato nella maggior parte delle risorse di apprendimento disponibili? Né la "Gentle Introduction to Monads" né la LYAH gli danno una menzione passeggera, e anche la maggior parte degli elenchi di operatori Haskell lo rinunciano. (È considerato una cattiva pratica?)

Infine, questo è equivalente all'utilizzo di parentesi, come in, (myVar <- f -< x) == (myVar <- (f x))? O è più come usare let myVar = (f x)? In entrambi i casi, se questo è il modo in cui viene utilizzato, perché utilizzare -< su Paren o $?

+1

durante la ricerca di simboli, [hoogle] (https://www.haskell.org/hoogle/?hoogle=-%3C) e [hayoo] (http://hayoo.fh-wedel.de/?query = -% 3C) sono i tuoi amici. – rampion

risposta

16

Sì, è lo stesso tipo di freccia. C'è la sintassi dello zucchero per le frecce proprio come c'è la sintassi dello zucchero per le monadi. Non è possibile utilizzare Google per cercare -<, ma è possibile utilizzare Hoogle.

Vedere: GHC Language Features, Arrow tutorial.

La sintassi della freccia è effettivamente scarsamente documentata. Il motivo per cui non è possibile utilizzare $ anziché -< è che -< inietta un valore puro nella freccia, ma -> è solo un esempio di una freccia. Quindi, $ funziona correttamente se la tua freccia è ->. Ci sono anche frecce monadiche (il costruttore Kleisli crea quelle) e puoi creare le tue frecce, e in questi casi -< è diverso.

Problemi correlati