4

我真的不知道应该如何使用 List 转换ListT器。例如应该如何完成这个简单的任务:

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

函数的类型应该是什么?

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

4

2 回答 2

4

您应该查看正确完成的 ListT 和回溯LogicT包。特别是 logict 中的交错可以更好地处理无穷大。

于 2011-06-20T11:51:32.070 回答
3

这是你想做的吗?

import Control.Monad.List

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

在 GHCi 中运行的示例:

*Main> runListT backtrack
foo
'f'
'o'
'o'
[(), (), ()]
于 2011-06-18T19:11:46.640 回答