Haskell:无法弄清楚如何使用 monad 变压器堆栈

标签 haskell monads monad-transformers

我有一个类型

type T s r a = StateT [s] (ListT (Reader r)) a

我想创建一个产生每个当前状态的一元值

states :: T a r a

但是我今天感觉很愚蠢,我不知道如何将 T a r [a] 的值转换为 T a r a

states = do
  as <- get
  -- insert magic
  return a

最佳答案

找到了出路

states = do
  as <- get
  a <- lift . ListT $ return as
  return a

可以压缩为

states = get >>= lift . ListT . return

好吧,现在感觉更聪明了

关于Haskell:无法弄清楚如何使用 monad 变压器堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7132306/

相关文章:

Haskell 过滤器字符串只包含第一个出现的字符

空集上的 Haskell 模式匹配

json - 在 Haskell 中将 JSON 字符串解析为记录

database - 处理变压器堆栈中的数据库访问

function - haskell 中的函数 (.).(.)

haskell - 状态 monad 函数得到了吗?

java - 为什么Java没有Try Monad?

f# - F# 中的组合单子(monad)

javascript - 外部 monad 没有 monad 约束的 MaybeT 应用实例

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