我真的不知道应该如何使用List转换器ListT
。例如,如何完成这个简单的任务:
backtrack :: ListT IO ()
backtrack = do
x <- lift getLine
a <- x
lift $ print a
该功能的类型应该是什么?
这不是我想要完成的任务(我知道如何使用许多其他方法来解决这个问题),我只是想知道如何使用ListT
来完成这些任务。
答案 0 :(得分:4)
您应该查看ListT done right和回溯LogicT包。特别是logict中的interleave可以更好地处理无穷大。
答案 1 :(得分:3)
这是你想要做的吗?
import Control.Monad.List
backtrack :: ListT IO ()
backtrack = do
x <- ListT getLine
lift $ print x
在GHCi中运行示例:
*Main> runListT backtrack
foo
'f'
'o'
'o'
[(), (), ()]