实例定义为
instance MonadFix [] where
mfix f = case fix (f . head) of
[] -> []
(x:_) -> x : mfix (tail . f)
[]
但是对于被视为非确定性计算的单子,我无法理解其背后的直观含义。In mfix f
functionf
的参数不能严格,因此它不能检查参数。而且根据定义,它也不能在其输出中的任何地方使用该参数,否则在某些时候它会碰撞fix (f . head)
和发散。那么对于列表还有什么用途(或很好的例子)mfix
,除了mfix (const someList)
?