¿Es posible implementar `(Applicative m) => Applicative (StateT s m)`?

Actualmente estoy trabajando enData.Fresh yControl.Monad.Trans.Fresh, que resp. define una interfaz para generar nuevas variables y un transformador de mónada que implementa esta interfaz.

Inicialmente pensé que sería posible implementar elApplicative instancia para miFreshT v m con el único requisito de queApplicative m existe Sin embargo, me quedé atascado y parecía que necesitaba requerirMonad m. Sin confiar en mi Haskell-fu, me volví hacia el paquete de transformadores y me sorprendió lo que encontré enControl.Monad.Trans.State.Lazy y.Strict:

instance (Functor m, Monad m) => Applicative (StateT s m) where
    pure = return
    (<*>) = ap

Así que aquí está mi pregunta: ¿es posible crear una instancia con semántica equivalente con el siguiente encabezado de instancia?

instance (Applicative m) => Applicative (StateT s m) where

Respuestas a la pregunta(3)

Su respuesta a la pregunta