【发布时间】:2011-06-18 17:28:36
【问题描述】:
我真的不知道应该如何使用 List 转换器 ListT。比如这个简单的任务应该怎么做:
backtrack :: ListT IO ()
backtrack = do
x <- lift getLine
a <- x
lift $ print a
函数的类型应该是什么?
这不是我想要完成的任务(我知道如何使用许多其他方法来解决这个问题),我只是想知道如何使用ListT 来完成这些任务。
【问题讨论】:
-
您要完成什么任务?你实际上并没有说。
-
我只是想了解如何使用ListT来获取带有IO的List Monad的特性。我所说的“这不是我想要完成的任务”的真正意思是我不想要不使用
ListT的问题的解决方案,因为我已经知道如何使用mapM来完成此任务例子。 -
a <- x没有多大意义,因为x属于“monad 类型”,例如m a中的普通a。您可能想要x <- liftGetline; lift $ print a? -
标准库中的
ListT实际上并不进行回溯。ListT m通常也不是单子,而m是。ListT有一个很好的实现,但我现在似乎找不到它:-( -
@monadic 感谢您的贡献,但我并没有真正理解您的问题。 @luqui 你在说 LogicT 吗?!
标签: haskell io generic-list backtracking monad-transformers