猜测定点组合器的类型

Guessing the type of fixed-point combinator

我的问题与 "fixed point combinator" 有关。根据 this Wikipedia page section 一个函数 fix 这样

fix f = f (fix f)

是类型(或至少可以是类型)

(a -> a) -> a

谁能解释一下为什么?

从定义开始

fix f = f (fix f)

因为它需要一个参数,fix 必须有一个类似于

的类型
fix :: x -> y

它将它的论点应用于某事,所以实际上

fix :: (p -> q) -> r

它实际上将其参数应用于 fix f,所以

fix :: (r -> q) -> r

最后的结果其实就是这次申请的结果,所以

fix :: (r -> r) -> r