【发布时间】:2016-11-05 05:51:44
【问题描述】:
实例定义为
instance MonadFix [] where
mfix f = case fix (f . head) of
[] -> []
(x:_) -> x : mfix (tail . f)
但是对于被视为非确定性计算的[] monad,我无法理解其背后的直观含义。在mfix f 函数中,f 的参数不能严格,所以它不能检查参数。而且根据定义,它也不能在其输出的任何地方使用该参数,否则在某些时候它会达到fix (f . head) 并发散。那么除了mfix (const someList) 之外,mfix 对于列表还有什么用处(或很好的例子)吗?
【问题讨论】:
-
“
f的论点不能严格”并不意味着if不能懒惰地检查论点。 -
@Bergi 好点。你能详细说明一个例子吗?
标签: list haskell monads monadfix