fix
fix 是一个在 Data.Function 中定义的函数,主要用于定义不动点函数。
fix :: (a -> a) -> a fix f = let x = f x in x
fix 函数的定义使用了递归绑定,比较难以理解:
fix f = let x = f x in x = let x = f x in f x = let x = f x in f (f x) = let x = f x in f (f (f x)) = let x = f x in f (f .. (f (f x)) ..) = let x = f x in f . f . ... . f . f $ x
即 fix 函数的实质是无限多次调用函数 f,直至函数 f 结束递归并产生一种能被自身调用的数据结构。
这里的最终参数 x 是一个永远不会被调用的参数,也就是一个占位符。
原文:https://www.cnblogs.com/zwvista/p/9267657.html