我正在开发一个Haskell项目,涉及到一个大结:我parsing一个graphics的序列化表示,其中每个节点在文件中有一些偏移量,并且可以通过偏移量引用另一个节点。 所以我需要在parsing的时候build立一个从偏移到节点的映射,我可以在do rec块中反馈给自己。 我有这个工作,而且有点不合理地抽象成一个StateT monque转换器: {-# LANGUAGE DoRec, GeneralizedNewtypeDeriving #-} import qualified Control.Monad.State as S data Knot s = Knot { past :: s, future :: s } newtype RecStateT sma = RecStateT (S.StateT (Knot s) ma) deriving ( Alternative , Applicative , Functor , Monad , MonadCont , MonadError e , MonadFix , MonadIO […]