我被以下单子问题困扰:
假设我有一个标准的单子状态,状态为 S = (LS, RS)。我还有另一个单子:
newtype StateP a = StateP {runP :: S -> (a, RS)}
我想使用 StateP 执行一些计算,然后将状态与 State monad 中的状态合并:
merge m :: StateP() -> State()
merge m = do
s@(l,r) <- get
put (l, snd (runP m s))
它不起作用,但我不明白为什么?有没有另一种方法来实现这样的功能?