Ich habe einen Monade-Transformator UlffT
wie folgt definiert."Typ Synonym-Instanzen sind nicht erlaubt", obwohl ich eine neue Art Monade-Transformer haben
Ich arbeite mit Halogen
, aber das ist keine Halogen
-Frage - Ich biete nur Kontext. UlffT
soll auf Aff
gestapelt und in HalogenM
verwendet werden.
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
Bis hier ist alles in Ordnung. Jetzt definiere ich den offensichtlichen Fall für MonadAsk
wie folgt.
instance monadAskUlffT
:: MonadAsk Env (UlffT m) where
ask = UlffT $ lift ask
und ich erhalte die Fehler
Type class instances for type synonyms are disallowed.
UlffT
kein Typ Synonym ist. Ich erwartete Fehler bezüglich m
, z.B. Ich muss Einschränkungen wie Monad m => ...
oder Monad (UlffT m) => ...
deklarieren.
Ich bekomme den gleichen Fehler, wenn Sie die MonadAsk
-Instanz ableiten.
Was ist der Typ "Env"? Vielleicht ist das das Synonym? –
Das ist die richtige Antwort –