Guardando la documentazione per Control.Applicative
, ho notato che essi hanno le dichiarazioni di istanza per alcuni monadi (ad esempio IO
, Maybe
e in particolare ST
), ma non ci sono casi di monadi MTL quali State
e RWS
. Sembra invece che sia definito un tipo generico WrappedMonad
, che suppongo copra tutti gli altri casi.Istanza applicativa per stato e altre monadi MTL?
Così qui sono le mie domande:
Perché non ci sono
Applicative
istanze per monadi MTL? La risposta migliore che sono riuscito a trovare da sola è una three year old post, in cui qualcuno ha implementato queste istanze ed è stata sommariamente ignorata.Qual è l'accordo con
WrappedMonad
? Ho trovato un post on Reddit che lo spiega brevemente, ma penso di essere confuso su come usarlo.
In definitiva mi piacerebbe essere in grado di utilizzare State
in uno stile applicativo (come era recommended to me), ma se devo cucciolata il mio codice con WrappedMonad
costruttori di dati allora non sembrare come una vittoria. Potrei anche ignorare completamente WrappedMonad
e definire l'istanza Applicative
allo stesso modo in cui è stata eseguita per IO
, ST
e così via: in termini di return
e ap
... Ma anche questo sembra sciocco.
Se solo avessimo Functor => Applicativo => Monade, e (Alternativa, Monade) => MonadPlus – alternative