J'ai défini un transformateur de monade UlffT
comme suit.« instances de synonymes de type ne sont pas autorisés », même si j'ai un transformateur monade newtype
Je travaille avec Halogen
, mais ce n'est pas un Halogen
-question - Je fournis juste le contexte. UlffT
est destiné à être empilés sur Aff
et utilisé HalogenM
.
newtype UlffT m a = UlffT (ExceptT Error (ReaderT Env m) a)
unUlffT :: forall m. UlffT m ~> ExceptT Error (ReaderT Env m)
unUlffT (UlffT m) = m
derive newtype instance functorUlffT :: Functor m => Functor (UlffT m)
derive newtype instance applyUlffT :: Monad m => Apply (UlffT m)
derive newtype instance applicativeUlffT :: Monad m => Applicative (UlffT m)
derive newtype instance bindUlffT :: Monad m => Bind (UlffT m)
derive newtype instance monadUlffT :: Monad m => Monad (UlffT m)
instance monadTransUlffT
:: MonadTrans UlffT where
lift = UlffT <<< lift <<< lift
instance monadEffUlffT
:: MonadEff eff m
=> MonadEff eff (UlffT m) where
liftEff = lift <<< liftEff
instance monadAffUlffT
:: MonadAff eff m
=> MonadAff eff (UlffT m) where
liftAff = lift <<< liftAff
Tout va bien ici. Maintenant, je définis l'instance évidente pour MonadAsk
comme suit.
instance monadAskUlffT
:: MonadAsk Env (UlffT m) where
ask = UlffT $ lift ask
Et je reçois l'erreur
Type class instances for type synonyms are disallowed.
UlffT
n'est pas synonyme de type. Je m'attendais à des erreurs concernant m
, par ex. Je dois déclarer des contraintes comme Monad m => ...
, ou Monad (UlffT m) => ...
.
je reçois la même erreur, lors du calcul de la MonadAsk
-instance.
Quel est le type 'Env' impliqué ici? Peut-être que c'est le synonyme? –
Voilà la bonne réponse –