函数式编程简介:类型练习

时间:2017-04-14 17:42:11

标签: functional-programming

在“函数式编程简介”(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)中的假设是否正确,并且是解释器所推断的。

0 个答案:

没有答案