Haskell Agda 中的部分

Haskell Sections in Agda

在Haskell中我们可以分段一个二元运算得到两个函数 (x ⊕)(⊕ y)。据我所知,我们可以通过编写 _⊕_ x 来模仿第一部分,但是我们可以在第二部分中完全这样做吗?

例子 在这里,我定义了一个已经分段的 Agda 库版本 Function._$_ 来执行上面提到的第二部分。 但是,它在下面我想要的情况下不起作用,我不知道为什么。 欢迎任何见解!

$ : ∀ {a b} {A : Set a} {B : A → Set b} → (x : A) → ((y : A) → B y) → B x
$ x = λ f → f x

success-usage : ∀{a b}{A : Set a}{B : Set b} → A → (A → B) → B
success-usage x = $ x

failed-usage : ∀{A : Set} → (∀{B : Set} → B) → (∀{B : Set} → B → A) → A
failed-usage {A} bs = $ (bs {A})
-- works : λ {A} bs f → $ (bs {A}) f

谢谢你:-)

Agda 开发版 (2.4.3) 包含以下部分:

open import Function

ok₁ : ∀{a b}{A : Set a}{B : Set b} → A → (A → B) → B
ok₁ x = _$ x

ok₂ : ∀{A : Set} → (∀{B : Set} → B) → (∀{B : Set} → B → A) → A
ok₂ {A} bs = _$ (bs {A})

ok₃ : ∀{a b}{A : Set a}{B : Set b} → (A → B) → A → B
ok₃ f = f $_