インスタンスは次のように定義されます。
instance MonadFix [] where
mfix f = case fix (f . head) of
[] -> []
(x:_) -> x : mfix (tail . f)
[]
しかし、非決定論的計算と見なされるモナドに関して、その背後にある直感的な意味を把握できていません。In mfix f
functionf
はその引数で厳密であってはならないため、引数を調べることができません。また、定義によれば、出力のどこでも引数を使用することはできません。そうしないと、ある時点でヒットfix (f . head)
して発散します。mfix
では、 for リスト以外の用途 (または良い例) はありますmfix (const someList)
か?