3
我想基本上映射一個列表並同時攜帶一些狀態。我想結合名單和國家monads可能會讓我在那裏。我嘗試了幾件事情,發現我可能需要使用ListT
。作爲我的實際問題的簡化版本,假設我想實現sum
函數,同時還返回原始列表的修改版本。這或類似的是我想象它會看起來像:如何在Haskell中組合列表和狀態Monad
sum' :: ListT (State Int) Int
sum' = do
lift $ put 0
x <- [1,2,3]
lift $ modify (+x)
return $ x + 1
什麼我不明白而又在常規列表單子的語法如何轉化到ListT單子。我不能簡單地做x <- [1,2,3]
,因爲在箭頭的右側,預計輸入ListT (State Int) t0
。 x <- return [1,2,3]
編譯(如讓編譯器不要抱怨這一行),但讓我把整個列表放到x中,而不是每個元素。
我如何得到這個工作?
想要'ssum xs = execState(遍歷(修改。(+))xs)0'嗎? – user3237465
不幸的是,每當有人談論'ListT',你真的不得不問「哪一個?」因爲有幾個非常不同的版本表現得非常不同。 – dfeuer