我有带有签名 f::[a] -> StateT Int Reader b [c]
的函数 f
和带有 f'
的函数签名 f'::a -> StateT Int Reader b [c]
f 中的计算(非常简化)如下所示:
f [] = return []
f (s:st) = f' s >>= \x ->
f st >>= \y ->
return $ ...
并且代替...我想返回 x
++
的 [c]
部分
部分,周围包裹着 monad 内容。y
的 [c]
是否有可能在不手动解开 x
和 y
并再次手动将结果放在一起的情况下实现这一目标?我是否需要在 monad 堆栈底部添加一个 List monad 才能获得简单的代码? Reader Monad 显然不是 MonadPlus 类的实例。
最佳答案
我不明白你打开x
和y
的意思。
我会将最后一行作为
return (x ++ y)
我是否误解了你想要的东西?
关于haskell - monad 变压器和多个 monad 的堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2107881/