在有状态的monad中获得支持异常的状态

时间:2017-05-12 16:38:55

标签: haskell functional-programming state-monad

我试图弄清楚如何解决以下问题: 我想要一个行为像StateExcept的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 () }

我很欣赏一些关于在哪里寻找的提示

0 个答案:

没有答案