多态自我应用

时间:2016-02-08 05:33:12

标签: haskell lambda system-f

我有一个系统F plymorphism的例子,我真的不明白: enter image description here

如果我删除它会保留的类型: \ f。\ a.f(f a)毫无意义。

你能帮我解决这个问题吗? 谢谢!

1 个答案:

答案 0 :(得分:4)

删除的术语确实有意义:在Haskell中它将是\f a -> f (f a),这是一个相当普通的函数,它将第一个参数应用于第二个参数,然后再次应用于结果。

\f a -> <body>\f.\a. <body>之间的差异只是表示法之一。如果您愿意,可以编写Haskell术语\f -> \a -> f (f a),它等同于语法上更接近已擦除的系统F.

(请注意,double不是自我申请,而是\f -> f f。)