在Morte(一种构造微积分的实现)中,该表达式的类型很好:
$ morte
( λ(Nat : *)
-> λ(Zero : Nat)
-> Zero
)
(∀(a : *) -> (a -> a) -> a -> a)
(λ(a : *) -> λ(Succ : a -> a) -> λ(Zero : a) -> Zero)
^D
∀(a : *) → (a → a) → a → a
λ(a : *) → λ(Succ : a → a) → λ(Zero : a) → Zero
但是这个显然等效的表达式不是:
$ morte
( λ(Nat : *)
-> ( λ(Zero : Nat)
-> Zero)
(λ(a : *) -> λ(Succ : a -> a) -> λ(Zero : a) -> Zero)
)
(∀(a : *) -> (a -> a) -> a -> a)
^D
morte:
Context:
Nat : *
Expression: (λ(Zero : Nat) → Zero) (λ(a : *) → λ(Succ : a → a) → λ(Zero : a) → Zero)
Error: Function applied to argument of the wrong type
Expected type: Nat
Argument type: ∀(a : *) → ∀(Succ : a → a) → ∀(Zero : a) → a
这是为什么?
答案 0 :(得分:0)
您只是放错了一个括号。交换第4行和第5行,然后键入check pass。