Я имею функцию 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
и вручную снова собрать результат? Нужен ли мне Монада списка внизу моего стека монады, чтобы получить простой код? Reader Monad, очевидно, не является экземпляром класса MonadPlus.
Ах да, вы 're right - thx :) Я перепутал тип базовой монады и тип результата вычисления. – haselhorstk