generated at
fix関数
引数に取る関数 f 最小不動点を返す
Control.Monad.Fixに定義されている


定義 ref
hs
fix :: (a -> a) -> a fix f = f (fix f)
不動点コンビネータの定義をそのまま書き下している


定義2
hs
fix :: (a -> a) -> a fix f = let x = f x in x
不動点反復法の定義をそのまま書き下している
let x_{n+1} = f x_n のようなイメージから発想すれば、自然に↑のような定義になる


定義を見れば分かる通り、引数に与えた関数が無限に適用される
_
fix g = g (fix g) = g (g (fix g)) ... = g (g (g (g (... (g (fix g)) ...))))


例えば、 (0:) という関数を適用すれば、 0 の無限リストが得られる
hs
> fix (0:) [0,0,0,0,0,..]



関連


参考
「最も定義されていない不動点」というのは、意味近似順序における最小であるということ
fix関数の導出


>"Grokking Fix"
>一見するとよく分からない fix 関数の挙動を、実際に不動点を求めたりリストの関数を実装したりモナドと組み合わせたりしながら、例を通して解説した記事