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