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