多态自应用

Polymorphic self application

我有一个我不太理解的 System F 多态性的例子:

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

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

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

\f a -> <body>\f.\a. <body>之间的区别只是符号之一。如果您愿意,可以写 Haskell 术语 \f -> \a -> f (f a),它是等效的,但在句法上更接近于已擦除的系统 F.

(注意double不是自己申请,应该是\f -> f f。)