我有这种格式的计算:s -> a -> s
,s
某些状态的类型在哪里。这样一个函数的结果也是下一次求值的状态。例如,
appendInt :: String -> Int -> String
appendInt s i = s ++ (show i)
然后,appendInt "Int: " 1
将给予"Int: 1"
,同时(appendInt $ appendInt "Int: 1") 2
将给予"Int: 12"
。但是,我找不到将这种计算放入State
Monad 的方法。
第一个猜测是s -> (s,s)
,但随后a
无法传入。然后,我尝试了 ,但(a -> s) -> (s, a -> s)
又一次无法获得。不起作用,因为是输入而不是输出。s
a
s -> (a,s)
a
那么我应该如何包装这个计算呢?State
单子适合这个吗?