我有一个类型
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/