En cuanto a la documentación para Control.Applicative
, I cuenta de que tienen declaraciones de instancia para ciertos mónadas (por ejemplo IO
, Maybe
y notablemente ST
), pero no existen instancias para mónadas MTL como State
y RWS
. En su lugar, parece que hay un tipo de propósito general WrappedMonad
definido, que supongo que cubrirá todos los demás casos.¿Instancia aplicable para el estado y otras mónadas de MTL?
Así que aquí están mis preguntas:
Por qué no hay
Applicative
casos de mónadas MTL? La mejor respuesta que he podido encontrar hasta ahora es three year old post, donde alguien implementó estas instancias y fue ignorado sumariamente.¿Cuál es el problema con
WrappedMonad
? Encontré un post on Reddit que lo explica brevemente, pero creo que estoy confundido acerca de cómo usarlo.
En última instancia me gustaría ser capaz de utilizar State
en un estilo aplicativo (como era recommended to me), pero si tengo que mi código de arena con WrappedMonad
constructores de datos y luego no lo hace parecer como una victoria. También podría ignorar por completo WrappedMonad
, y definir la instancia Applicative
de la misma manera que se hizo para IO
, ST
y así sucesivamente: en términos de return
y ap
... Pero eso parece ridículo también.
Si solo tuviéramos Functor => Applicative => Monad, y (Alternativa, Monad) => MonadPlus – alternative