1
私はモナド変換器UlffT
を次のように定義しました。私はnewtypeモナド変換器を持っていても "型同義語インスタンスは許可されていません"
私は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'タイプは何ですか?おそらくそれは同義語ですか? –
これは正しい答えです –