在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
谢谢你: - )
答案 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 $_