我不知道如何使用列表變形器ListT
。例如,如何完成這個簡單的任務:如何使用ListT獲取回溯和IO?
backtrack :: ListT IO()
backtrack = do
x <- lift getLine
a <- x
lift $ print a
而應該是什麼類型的函數?我不知道如何使用ListT
來完成這樣的任務。
我不知道如何使用列表變形器ListT
。例如,如何完成這個簡單的任務:如何使用ListT獲取回溯和IO?
backtrack :: ListT IO()
backtrack = do
x <- lift getLine
a <- x
lift $ print a
而應該是什麼類型的函數?我不知道如何使用ListT
來完成這樣的任務。
這是你正在嘗試做什麼?
import Control.Monad.List
backtrack :: ListT IO()
backtrack = do
x <- ListT getLine
lift $ print x
實例GHCI運行:
*Main> runListT backtrack
foo
'f'
'o'
'o'
[(),(),()]
你應該看看ListT done right和回溯LogicT包。特別是interleave在邏輯上更好地處理無限。
你想完成什麼任務?你其實並沒有說。 –
我只是想了解如何使用ListT來獲取帶有IO的List Monad的功能。 我的意思是「這不是我想要完成的任務」,我不想爲不使用'ListT'的問題提供解決方案,因爲我已經知道如何使用'mapM'來完成這個任務例如。 – is7s
'a <-x'沒有多大意義,因爲'x'是「單子類型」,例如,'m a'中的正常'a'。可能你想'x < - liftGetline;舉起$ print a'? – alternative