1

我有以下数据类型:

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

我应该使用哪种方式,第一种还是第二种?

4

0 回答 0