[Agda] default field values
Sergei Meshveliani
mechvel at botik.ru
Tue Jan 14 13:44:43 CET 2014
People,
I have a question about a default value in a record
in the Agda language
(I do not know, may be I am missing some simple consideration).
Consider the example:
-- I -----------------------------------------------------------------
record Foo {α α=} (A : Setoid α α=) : Set α
where
open Setoid A
field n : ℕ
a : Carrier
mb-b : Maybe Carrier
default-mb-b : n ≤ 1 → Maybe Carrier
default-mb-b _ = just a
mb-b-law : n ≤ 1 → Set _
mb-b-law _ = mb-b ≡ just a
----------------------------------------------------------------------
I need to specify that
mb-b is assigned (just a) for all the record instances in which
n ≤ 1.
The two lines of default-mb-b express something close to this -- but
not precisely.
mb-b-law is another attempt.
With both these expressions, the programmer will have certain
difficulties with using the corresponding default value.
Try another way:
-- II -------------------------------------------------------------
record Pre-Foo {α α=} (A : Setoid α α=) : Set α
where
open Setoid A
field n : ℕ
a : Carrier
mb-b : Maybe Carrier
record Foo {α α=} (A : Setoid α α=) : Set α
where
open Setoid A
field preFoo : Pre-Foo A
open Pre-Foo preFoo
foo : Pre-Foo A
foo = record { n = n;
a = a;
mb-b = case n ≤? 1 of \ { (yes _) → just a
; (no _) → mb-b }
}
--------------------------------------------------------------------
Foo takes Pre-Foo and updates the field mb-b respectively.
I doubt of whether this approach is better than (I).
It occurs that
one needs to program a value for mb-b individually for each record
instance,
while is is desirable to define a default case value, and to declare
it as a part of the record declaration.
Consider a new syntax with a keyword `default' :
record Foo {α α=} (A : Setoid α α=) : Set α
where
open Setoid A
field n : ℕ
a : Carrier
mb-b : Maybe Carrier
default
mb-b : n ≤ 1 → Maybe Carrier
mb-b _ = just a
(I doubt about the precise signature)
-- with the meaning of a default for the field mb-b by the condition
n ≤ 1.
There arise the questions:
1) Can this notion be nicely expressed in the current Agda ?
2) What will happen with the language after introducing `default' ?
3) If it has sense, is it difficult to implement?
Thanks,
------
Sergei
More information about the Agda
mailing list