преобразование монады списка

Мне нужно использовать преобразователь монад списка. Я читал, что существуют потенциальные проблемы с ListT IOиз Control.Monad.List, поскольку IOне является коммутативным, поэтому я смотрю на ListT сделано правильно. Но я получаю неожиданное поведение.

Рассмотрим этот простой тест:

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)
[(),(),(),(),(),(),(),(),()]

Использование "ListT сделано правильно":

Main> test
1
(1,6)

Это проблема с "ListT сделано правильно", или я просто использую его неправильно? Есть ли предпочтительная альтернатива?

Спасибо!

14
задан casperOne 21 May 2012 в 11:53
поделиться