如何漂亮地制作 Agda 漂亮的打印产品
How to make Agda pretty-print products nicely
考虑以下自包含程序:
module Test where
record Σ {A : Set} (B : A -> Set) : Set where
constructor _,_
field
fst : A
snd : B fst
open Σ public
infixr 0 _,_
_×_ : Set -> Set -> Set
A × B = Σ (\ (_ : A) -> B)
infixr 10 _×_
f : {A B : Set} → A × B → A
f x = {!!}
如果你在目标中 C-c C-l,你会得到:
Goal: .A
————————————————————————————————————————————————————————————
x : Σ (λ _ → .B)
.B : Set
.A : Set
即您会看到底层的 sigma,并且隐藏了 lambda 的活页夹类型。这很烦人。有没有办法让 Agda 显示默认不绑定名称的绑定器类型?
这是 Agda 2.3.2.2。
看来这个问题已经在最新版本的 Agda 中修复了,所以你应该升级。
Agda 2.4.3 显示 x : .A × .B
.
您可以使用 abstract 关键字:
abstract
_×_ : Set -> Set -> Set
A × B = Σ (\ (_ : A) -> B)
fst' : ∀ {A B} -> A × B -> A
fst' (x , y) = x
snd' : ∀ {A B} -> A × B -> B
snd' (x , y) = y
但这绝对是矫枉过正(看起来模式同义词在抽象块中不起作用)。
更让我恼火的是,Agda 不想缩减像 flip
尤其是 _∘_
这样的函数,而是展开一些定义非常长的函数。 Agda 需要一种机制来解决这些问题。
考虑以下自包含程序:
module Test where
record Σ {A : Set} (B : A -> Set) : Set where
constructor _,_
field
fst : A
snd : B fst
open Σ public
infixr 0 _,_
_×_ : Set -> Set -> Set
A × B = Σ (\ (_ : A) -> B)
infixr 10 _×_
f : {A B : Set} → A × B → A
f x = {!!}
如果你在目标中 C-c C-l,你会得到:
Goal: .A
————————————————————————————————————————————————————————————
x : Σ (λ _ → .B)
.B : Set
.A : Set
即您会看到底层的 sigma,并且隐藏了 lambda 的活页夹类型。这很烦人。有没有办法让 Agda 显示默认不绑定名称的绑定器类型?
这是 Agda 2.3.2.2。
看来这个问题已经在最新版本的 Agda 中修复了,所以你应该升级。
Agda 2.4.3 显示 x : .A × .B
.
您可以使用 abstract 关键字:
abstract
_×_ : Set -> Set -> Set
A × B = Σ (\ (_ : A) -> B)
fst' : ∀ {A B} -> A × B -> A
fst' (x , y) = x
snd' : ∀ {A B} -> A × B -> B
snd' (x , y) = y
但这绝对是矫枉过正(看起来模式同义词在抽象块中不起作用)。
更让我恼火的是,Agda 不想缩减像 flip
尤其是 _∘_
这样的函数,而是展开一些定义非常长的函数。 Agda 需要一种机制来解决这些问题。