Haskell может выдавать экземпляр для MonadState s
в T1
ниже, но не в T2
, который, однако, очень похож на тип. Каким образом я должен изменить код для T2
, чтобы можно было автоматически получить экземпляр для MonadState s
?Генератор обобщенного нового типа
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
import Control.Monad.Reader
import Control.Monad.State
newtype T1 r s a =
T1 { runT1 :: ReaderT r (State s) a }
deriving (Monad, MonadReader r, MonadState s)
newtype T2 r s a =
T2 { runT2 :: StateT r (State s) a }
deriving (Monad, MonadState r, MonadState s)