多态自应用
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
。)
我有一个我不太理解的 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
。)