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