haskell - monad 变压器和多个 monad 的堆叠

标签 haskell monads functional-programming monad-transformers

我有带有签名 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] 部分 y 的 [c] 部分,周围包裹着 monad 内容。
是否有可能在不手动解开 xy 并再次手动将结果放在一起的情况下实现这一目标?我是否需要在 monad 堆栈底部添加一个 List monad 才能获得简单的代码? Reader Monad 显然不是 MonadPlus 类的实例。

最佳答案

我不明白你打开xy的意思。

我会将最后一行作为

return (x ++ y)

我是否误解了你想要的东西?

关于haskell - monad 变压器和多个 monad 的堆叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2107881/

相关文章:

debugging - 是否可以在 Haskell 函数中 Debug模式匹配?

loops - Haskell:没有 (Num ()) 实例 - 定义我自己的单子(monad)循环

Node.js 流对象模式

javascript - 如何在 JavaScript 中将字符串树解析为数组

functional-programming - 依赖于先前元素的惰性序列

Haskell cabal 构建 undefined reference 错误并重复重新编译

Haskell - 函数 'length' 不适用于自定义数据类型

haskell - 为什么常数返回得更快?

Scala:使用 StateT monad 转换器组成的 Option 的错误推断类型

vector - Agda:Stdlib 中的向量成员资格? (以及一般如何学习 stdlib)