Lo stato monadePerfezionamento monade "interfaccia" "interfaccia"
class MonadState s m where
get :: m s
put :: s -> m()
(+ ritorno e bind) permette di costruire ogni possibile calcolo con monade Stato senza utilizzare State
costruttore. Ad esempio, State $ \s -> (s+1, s-1)
può essere scritta come
do s <- get
put (s-1)
return (s+1)
Analogamente, non ho mai dovuto usare Reader
costruttore, perché posso creare quel calcolo utilizzando ask
, return
e (>>=)
. Precisamente: Reader f == ask >>= return . f
.
E 'lo stesso vale per continuazioni - è possibile scrivere tutte le istanze di Cont r a
utilizzando callCC
(l'unica funzione di MonadCont
), tornare e si legano, e mai digitare qualcosa come Cont (\c -> ...)
?
Tuttavia, mi aspetto queste modifiche se si dispone di continuazioni delimitate ... –