1
我已经定义了一个单子变压器UlffT
如下。“类型同义词实例是不允许的”,即使我有一个新类型单子变压器
我正在与Halogen
,但这不是Halogen
-question - 我只是提供上下文。 UlffT
意味着堆叠在Aff
上,并在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
一切都很好,在这里。现在我将如下定义MonadAsk
的明显实例。
instance monadAskUlffT
:: MonadAsk Env (UlffT m) where
ask = UlffT $ lift ask
而我得到的错误
Type class instances for type synonyms are disallowed.
UlffT
是不是一个类型的同义词。我期待有关m
的错误,例如我必须声明约束如Monad m => ...
或Monad (UlffT m) => ...
。
当得到MonadAsk
-instance时,我得到相同的错误。
这里涉及的Env类型是什么?也许这就是同义词? –
这是正确的答案 –