我试图弄清楚如何解决以下问题:
我想要一个行为像State
和Except
的monad,所以我写了这样的东西:
type ExceptStateM s m a = ExceptT String (StateT s m) a
假设我们不想包装另一个monad并且状态是Int
,所以我们得到这样的monad:
type MyMonad a = ExceptStateM Int Identity
我现在想知道的是如何从这个monad获取状态,因为以下代码:
foo :: MyMonad Int
foo = do
state <- get
return ()
没有编译,出现以下错误:
Couldn't match expected type ‘ExceptT
String (StateT Int Identity) t0’
with actual type ‘StateT s0 m0 s0’
In a stmt of a 'do' block: state <- get
In the expression:
do { state <- get;
return () }
我很欣赏一些关于在哪里寻找的提示