[Agda] default field values
Andreas Abel
abela at chalmers.se
Sat Jan 18 12:10:58 CET 2014
As a work-around, you can define ``smart'' constructors that just need
the values of a couple of fields and create the other ones from the
given ones.
mkFoo n a = record { n = n; a = a; mb-b = mb-b n }
where
mb-b : ...
mb-b zero = nothing
mb-b (suc _) = just a
On 18.01.14 11:32 AM, Sergei Meshveliani wrote:
> On Fri, 2014-01-17 at 16:50 -0500, Wolfram Kahl wrote:
>> On Tue, Jan 14, 2014 at 04:44:43PM +0400, Sergei Meshveliani wrote:
>>> -- 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.
>>
>> I'd say that mb-b-law wants to be a field .
>>
>
> I am not sure that I understand the idea.
> Let us simplify the example:
>
> record Foo {α α=} (A : Setoid α α=) : Set α
> where
> open Setoid A
>
> field a : Carrier
>
> mb : Maybe Carrier
> mb = just a -- default implementation
>
>
> mb is a field. And the last line is not allowed in the Agda language.
> Right?
>
> And I suggest that this line of mb = ...
> to work as default.
> This means that
> 1) the mb implementation in any Foo instance overrides the default
> one (that is a special case overrides, it is stronger),
> 2) the checker sets the default implementation for each instance of Foo
> in which the field mb is skipped.
>
> This `default' construct in languages is well-known. Its purpose is to
> make instances simpler to program: if the programmer does not consider
> the case as special with respect to the field foo, one skips its
> implementation.
>
> Has this sense in Agda ?
>
> I think, its model in Agda is like this:
>
> record Foo {α α=} (A : Setoid α α=) : Set α
> where
> open Setoid A
>
> field a : Carrier
> mb : Maybe Carrier
>
> default-mb : Maybe Carrier
> default-mb = just a
>
> Now, when the programmer implements an Foo instance, one sets
>
> record{ ...
> mb = default-mb -- a common instance
> }
>
> for a general case, and ...
> mb = <special-implementation>
> for a special case.
> So, the code overhead in Agda-without-default is only this:
> a) a new function name `default-...' is introduced,
> b) an additional line of ... = default-... is inserted in many
> instances.
>
> As to the example with a conditional default, like by n ≤ 1, it is an
> unclear complication which could be considered later.
>
> Am I missing something?
>
> Thanks,
>
> ------
> Sergei
>
>
>
>
> _______________________________________________
> Agda mailing list
> Agda at lists.chalmers.se
> https://lists.chalmers.se/mailman/listinfo/agda
>
More information about the Agda
mailing list