У меня есть функция f
с подписью f :: [a] -> StateT Int Reader b [c]
и f'
с подписью f' :: a -> StateT Int Reader b [c]
Вычисление в f (очень упрощенное) выглядит так:
f [] = return []
f (s:st) = f' s >>= \x ->
f st >>= \y ->
return $ ...
И вместо ... Я хотел бы вернуть [c]
часть x
++
[c]
часть y
с монадой, обернутой вокруг.
Есть ли возможность добиться этого, не распаковывая вручную x
и y
и снова вручную складывая результат? Нужна ли мне монада List в нижней части моего стека монад, чтобы получить простой код? Read Monad, очевидно, не является экземпляром класса MonadPlus.