リストモナド変換子を使用する必要があります。可換ではないため、ListT IO
fromには潜在的な問題があることを読みました。そのため、 ListTが正しく実行されていることを確認しています。しかし、予期しない動作が発生しています。Control.Monad.List
IO
この簡単なテストを考えてみましょう。
test = runListT $ do
x <- liftList [1..3]
liftIO $ print x
y <- liftList [6..8]
liftIO $ print (x,y)
Control.Monad.Listの使用:
Main> test
1
(1,6)
(1,7)
(1,8)
2
(2,6)
(2,7)
(2,8)
3
(3,6)
(3,7)
(3,8)
[(),(),(),(),(),(),(),(),()]
「ListTdoneright」の使用:
Main> test
1
(1,6)
これは「ListTが正しく行われた」という問題ですか、それとも間違って使用しているだけですか?望ましい代替案はありますか?
ありがとう!