Я застрял со следующей проблемой монады:
Допустим, у меня есть стандартное состояние монады с состоянием S = (LS, RS). У меня также есть другая монада:
newtype StateP a = StateP {runP :: S -> (a, RS)}
Я хочу выполнить некоторые вычисления с использованием StateP, а затем объединить состояние с состоянием в монаде состояния:
merge m :: StateP() -> State()
merge m = do
s@(l,r) <- get
put (l, snd (runP m s))
Это не работает, но я не понимаю, почему? Есть ли другой способ добиться такой функциональности?