É possível implementar `(Applicative m) => Applicative (StateT s m)`?
Atualmente estou trabalhando emData.Fresh
eControl.Monad.Trans.Fresh
que resp. defina uma interface para gerar variáveis novas e um transformador de mônada que implemente essa interface.
Eu inicialmente pensei que seria possível implementar oApplicative
exemplo para o meuFreshT v m
com o único requisito queApplicative m
existe. No entanto, eu fiquei preso e parecia que eu preciso exigirMonad m
. Não confiando no meu Haskell-fu, eu então virei para o pacote de transformadores, e fiquei surpreso com o que eu encontrei emControl.Monad.Trans.State.Lazy
e.Strict
:
instance (Functor m, Monad m) => Applicative (StateT s m) where
pure = return
(<*>) = ap
Então, aqui está a minha pergunta: é possível criar uma instância com semântica equivalente com o seguinte cabeçalho de instância?
instance (Applicative m) => Applicative (StateT s m) where