haskell - 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 - Haskell与ContT,callCC混淆

haskell - 按值修改Haskell嵌套记录

haskell - 可以使用fold创建无限列表吗?

haskell - 在超类函数的定义中使用子类实现

exception - 为什么模式匹配在Maybe Monad中不会引发异常

haskell - 什么是RWS Monad,何时使用

haskell - Haskell中的并行计算

haskell - 有单子可以像自动机一样使用吗?

haskell - Monad变压器和升降功能

scala - 缺少Cats Functor [Future]实例