Haskell State monad,以元组为状态

时间:2015-04-29 10:55:21

标签: haskell state monads

如果我的问题很愚蠢(我对monads还不熟悉),我很抱歉,但到目前为止我找不到答案。

我想将对存储为State monad中的状态。但是,如果我在(Int,Int)的一个简单例子上尝试这个,我得到(ghci):

Prelude> import Control.Monad.State
Prelude Control.Monad.State> :t get :: State Int Int
get :: State Int Int :: State Int Int
Prelude Control.Monad.State> :t get :: State (Int, Int) Int

<interactive>:1:1:
    No instance for (MonadState
                       Int (StateT (Int, Int)  Data.Functor.Identity.Identity))
      arising from a use of ‘get’
    In the expression: get :: State (Int, Int) Int

我的问题是:
1.为什么? 2.我如何让它工作?

1 个答案:

答案 0 :(得分:4)

get的类型是

get :: State s s

所以,如果你需要s = (Int, Int)

get :: State (Int, Int) (Int, Int)

这就是全部。 get返回整个元组。