2
我最近偶然發現了loeb
和moeb
函數here,我試圖探索它可以做什麼。moeb遍歷不終止
我試圖實現類似電子表格的行爲,並在某些「單元格」中執行IO
。我認爲moeb traverse
看起來是個不錯的選擇,但是我使用的列表中的任何非平凡(即除const $ return something
之外的函數)都會導致整個調用永遠運行。這之後,我想測試它在State
單子:
moeb f x = fix $ \g -> f ($g) x
foo v = do
x <- get
vs <- v
put (x + 3)
return (x + (vs!!0))
test = [
const $ return 7,
foo,
fmap length
]
main = print $ runState (moeb traverse test) 5
結果是這樣的:
([7,12,3],moeb.hs: out of memory
爲什麼會出現這種情況? foo
都獲取和設置狀態,但它評估罰款,而最終狀態的評估掛起。 我該如何實現終止電子表格與IO行爲?
好吧,我明白了它爲什麼會掛起,但是通過使用'mfix'推廣'moeb'意味着什麼? – Ryba
一個簡單的例子就是'moebM f x = mfix $ \ g - > f($ g)x'。使用'traverse'作爲第一個參數,但'test'需要改變爲不同的類型。 –
這工作,謝謝 – Ryba