我真的不知道应该如何正确使用列表转换器ListT。例如,如何完成此简单任务:

backtrack :: ListT IO ()
backtrack = do
    x <- lift getLine
    a <- x
    lift $ print a


函数的类型应该是什么?

这不是我要完成的任务(我知道如何使用许多其他方法来解决此问题),我只想知道如何使用ListT完成这些任务。

最佳答案

这是您想要做的吗?

import Control.Monad.List

backtrack :: ListT IO ()
backtrack = do
    x <- ListT getLine
    lift $ print x


在GHCi中运行的示例:

*Main> runListT backtrack
foo
'f'
'o'
'o'
[(), (), ()]

10-06 07:13