这些多态类型之间的区别是什么?
Which is the difference between these polymorphic types?
在系统F中,以下3种类型有什么区别:
转载于此:
∀X.((X → X) → (X → X))
∀X.((X → X) → ∀X.(X → X))
((∀X.X → X) → (∀X.X → X))
第二个比第一个更通用吗?
取决于 forall
量词绑定的紧密程度。假设它绑定到下一个终端表达式(变量或 ()
-块)。
第一个将变为 (X0 -> X0) -> (X0 -> X0)
,其中 X0
是新类型变量。
第二个将变为 (X0 -> X0) -> forall X1. (X1 -> X1)
,其中 X0
和 X1
是新鲜的。
第三个 - (bot -> X) -> (bot -> X)
其中 X
是旧绑定,bot 是无人居住的 forall X. X
。
在系统F中,以下3种类型有什么区别:
转载于此:
∀X.((X → X) → (X → X))
∀X.((X → X) → ∀X.(X → X))
((∀X.X → X) → (∀X.X → X))
第二个比第一个更通用吗?
取决于 forall
量词绑定的紧密程度。假设它绑定到下一个终端表达式(变量或 ()
-块)。
第一个将变为 (X0 -> X0) -> (X0 -> X0)
,其中 X0
是新类型变量。
第二个将变为 (X0 -> X0) -> forall X1. (X1 -> X1)
,其中 X0
和 X1
是新鲜的。
第三个 - (bot -> X) -> (bot -> X)
其中 X
是旧绑定,bot 是无人居住的 forall X. X
。