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 に答える