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