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

Functional programming 函数式编程简介:类型练习,functional-programming,Functional Programming,在《函数式编程导论》(Bird/Wadlers)一书中,我遇到了以下练习: 推断fixfx=f(fixf)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 =

在《函数式编程导论》(Bird/Wadlers)一书中,我遇到了以下练习:

推断
fixfx=f(fixf)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)中的假设是否正确,以及是否会是口译员推断的结果。

只是想知道你在使用哪种语言和口译员。为了得到
修复的类型,我使用了Haskell和Hugs 98。事实上,这本书没有特别使用任何语言,只是提供了有关函数式编程的知识。这是一个非常酷的问题。我只是想能跟上。谢谢^^ ^
t4=t6->t4
是不可能的。是打字错误吗?是的,我同意,那是个错误。谢谢我只是想知道你用的是哪种语言和解释器为了得到
fix
的类型,我使用了Haskell和Hugs 98。事实上,这本书没有特别使用任何语言,只是提供了有关函数式编程的知识。这是一个非常酷的问题。我只是想能跟上。谢谢^^ ^
t4=t6->t4
是不可能的。是打字错误吗?是的,我同意,那是个错误。谢谢