我有以下数据类型:
data CheckState = CheckState { envs :: [Env]
, curPos :: SrcSpan
, inLoop :: Bool
, sourceCode :: Text
}
现在这个数据类型在 StateT monad 中使用:
func :: (MonadState CheckState m, MonadError Text m) => m a
但是它的两条记录可以放在 ReaderT monad 中:
data CheckState = CheckState { envs :: [Env]
, curPos :: SrcSpan
}
data CheckContext = CheckContext { inLoop :: Bool
, sourceCode :: Text
}
func :: (MonadReader CheckContext m, MonadState CheckState m, MonadError Text m)
=> m a
我应该使用哪种方式,第一种还是第二种?