在“函数式编程简介”(Bird / Wadlers)一书中,我遇到了以下练习:
推断fix f x = f (fix f) x
按照本书的说明推断出类型,我做了以下扣除:
从rhs开始:
f :: t1
x :: t2
f (fix f) x :: t3
因此,fix :: t1 -> t2 -> t3
继续推断lfs上的类型:
f :: t4 -> t2 -> t3
fix f :: t4
f :: t6
fix :: t6 -> t4
(1) t6 = t2 and t4 = t3
t1 = (t2 -> t3) -> t2 -> t3
因此,
fix :: ((t2 -> t3) -> t2 -> t3) -> t2 -> t3
用字母代替,
fix :: ((a -> b) -> a -> b) -> a -> b
当我要求修复类型时,这正是我从解释器获得的内容。
但是,我想知道我的推理是否正确以及我在(1)中的假设是否正确,并且是解释器所推断的。