dire che ho scritto il seguente pezzo amazin di codice:"<-" e valori associati
func = do
a <- Just 5
return a
E 'abbastanza inutile, lo so. Qui, a
è 5
e func
restituisce Just 5
.
Ora riscrivo la mia funzione impressionante (ancora inutile):
func' = do
a <- Nothing
return a
Questa funzione restituisce Nothing
, ma che diamine è a
? Non c'è niente da estrarre da un valore Nothing
, ma il programma non lamentele dei giocatori quando faccio qualcosa di simile:
func'' = do
a <- Nothing
b <- Just 5
return $ a+b
ho solo una difficoltà a vedere ciò che effettivamente accade. Che cos'è a
? In altre parole: cosa fa lo <-
in realtà? Dicendolo "estrae il valore dal lato destro e lo lega al lato sinistro" è ovviamente troppo semplicistico. Cosa non sto ottenendo?
Grazie :)
'<-' si traduce in' >> = '. Nel caso di 'Maybe' monad, se il primo argomento (cioè la parte destra di' <-') è 'Nothing', nient'altro viene valutato e' >> = 'restituisce' Nothing'. Quindi, per rispondere alla tua domanda: l'esecuzione non ha nemmeno _reach_ 'a'. – Vitus
Pensando a monadi come contenitori, la notazione consente di assegnare etichette ai valori (se presenti) all'interno delle monadi e quindi definire le funzioni da applicare a tali valori. Ma l'estrazione è un'illusione - le funzioni sono applicate all'interno della monade (usando '>> =') perché non esiste un modo generale per estrarre un valore da una monade. Si noti come si termina ogni blocco di do inserendo il risultato _back nella monade_, spesso usando 'return'. Non hai mai avuto una variabile 'a' uguale a 5. – Nefrubyr