Haskell 以元组为状态的状态 monad
Haskell State monad with tuples as state
如果我的问题很愚蠢(我对 monad 还是很陌生),我深表歉意,但到目前为止我找不到答案。
我想将对作为状态存储在 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. 我如何让它工作?
get
的类型是
get :: State s s
所以如果 s = (Int, Int)
那么你想要
get :: State (Int, Int) (Int, Int)
就是这样。 get
returns 整个元组。
如果我的问题很愚蠢(我对 monad 还是很陌生),我深表歉意,但到目前为止我找不到答案。
我想将对作为状态存储在 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. 我如何让它工作?
get
的类型是
get :: State s s
所以如果 s = (Int, Int)
那么你想要
get :: State (Int, Int) (Int, Int)
就是这样。 get
returns 整个元组。