我正在用Haskell编写一个事件驱动的应用程序,因此我需要存储几个回调函数以供进一步使用。我希望这样的回调是:
多态:(MonadIO m, MonadReader MyContext m, MonadState MyStatem, MonadError MyError m) => m ()类型,而不是ReaderT MyContext (StateT MyState (ErrorT MyError IO)))类型MyCo
假设我有一个定制的monad,m,并且我对它使用了一个StateT转换,因此使用StateT s m a类型而不是m (State s a)。将输入写为State s a还是StateT s Identity a并不重要(这在代数上更精确?)recFuncT :: StateT s Identity a -> [t] -> StateT s m arecFuncT :: StateT s Identity a
我正在尝试使用ExceptT a (StateT A M),例如A和monad M的一些具体类型,并将它们封装到我的新定制单元组中。首先,我发现StateT A M经常出现在其他上下文中,因此我决定最好将其单独包装在单M1中,然后将ExceptT a M1包装到M2中。首先,我从简单类型的同义词开始:type MyBranch a = ExceptT a MyState
然后,我想我应该先勾勒出实例声明(而不是实现实例我想我必须创建newtype MyState' a =