ram*_*ion 3 monads haskell monad-transformers
我有一个类型
type T s r a = StateT [s] (ListT (Reader r)) a
Run Code Online (Sandbox Code Playgroud)
我想创建一个monadic值,产生每个当前状态
states :: T a r a
Run Code Online (Sandbox Code Playgroud)
但我今天感觉很愚蠢,我无法弄清楚如何将价值转化T a r [a]为T a r a.
states = do
as <- get
-- insert magic
return a
Run Code Online (Sandbox Code Playgroud)
想出了办法
states = do
as <- get
a <- lift . ListT $ return as
return a
Run Code Online (Sandbox Code Playgroud)
哪个可以压缩到
states = get >>= lift . ListT . return
Run Code Online (Sandbox Code Playgroud)
好的,现在感觉更聪明