阿格达的Haskell部分

时间:2015-12-17 03:37:56

标签: haskell 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

谢谢你: - )

1 个答案:

答案 0 :(得分:6)

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 $_