我有类型
ActionT TL.Text (ReaderT T.Text IO)
我正在尝试为此创建一个 MonadReader 实例,这样我就不必提出询问,但总是得到
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use -XFlexibleInstances if you want to disable this)
我尝试了一堆实例类型,下面有几个,但他们总是得到上述错误
instance MonadReader T.Text (ActionT TL.Text (ReaderT T.Text IO))
instance MonadReader r (ActionT TL.Text (ReaderT r IO))
instance (ScottyError e, MonadReader r m) => MonadReader r (ActionT e (ReaderT r m))
我觉得我缺少实例的基本内容。我想我明白FlexibleInstances
了,但我看不出这如何适用于此。
任何有关实例类型的帮助都将不胜感激,我想实现自己ask
,local
因为主要目标是学习。
谢谢。
更新
我得到了它FlexibleInstances, MultiParamTypeClasses, UndecidableInstances
和
instance (ScottyError e, Monad m, MonadReader r m) => MonadReader r (ActionT e m) where
ask = lift ask
仍在努力执行本地。我也假设UndecidableInstances
是坏的?
更新 2
我想我真正需要的是。
instance (ScottyError e, Monad m, MonadReader r m) => MonadReader r (ActionT e (ReaderT r m)) where
但我还是想不通local