Czy możliwe jest wdrożenie `(Zastosowanie m) => Zastosowanie (StanT s m)`?

Obecnie pracuję nadData.Fresh iControl.Monad.Trans.Fresh, które odpowiednio. zdefiniuj interfejs do generowania świeżych zmiennych i transformator monadowy, który implementuje ten interfejs.

Początkowo myślałem, że możliwe będzie wdrożenieApplicative przykład dla mojegoFreshT v m z jedynym wymaganiemApplicative m istnieje. Jednak utknąłem i wydawało mi się, że muszę wymagaćMonad m. Nie ufając mojemu Haskell-fu, wróciłem do pakietu transformatorów i byłem zaskoczony tym, co znalazłemControl.Monad.Trans.State.Lazy i.Strict:

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

Oto moje pytanie: czy można utworzyć instancję z równoważną semantyką z następującą głową instancji?

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

questionAnswers(3)

yourAnswerToTheQuestion