[Agda-dev] RFC: New semantics for record declarations
Andreas Abel
abela at chalmers.se
Thu Dec 4 10:14:03 CET 2014
Well, the new semantics produces two internal modules and we need to
ensure they do not show up when printing terms. Given the fragility of
display forms, I am afraid they will...
On 04.12.2014 09:55, Nicolas Pouillard wrote:
> I support lifting this restriction about let-like declarations in record
> declarations. Do you see any drawback of your proposal?
>
> On 12/04/2014 12:10 AM, Andreas Abel wrote:
>> W.l.o.g., a record declaration looks like this:
>> (d1..d3 are declarations, [...] says explicitly what is in scope)
>>
>> record R (p : P) : Set where
>> constructor c
>> d1[p]
>> field f1 : F1[p,d1]
>> d2[p,d1,f1]
>> field f2 : F2[p,d1,f1,d2]
>> d3[p,d1,f1,d2,f2]
>>
>> Current semantics:
>>
>> postulate R : P -> Set
>> postulate c : (p : P) -> let d1 in (f1 : F1) ->
>> let d2 in (f2 : F2) -> R p
>>
>> module R (p : P) (r : R p) where
>> d1
>> f1 : F1
>> f1 = r.f1
>> d2
>> f2 : F2
>> f2 = r.f2
>> d3
>>
>> The drawback is that let only understands certain declarations. In
>> particular, no fixity decls, no pattern matching etc.
>>
>> The following new semantics for record declarations would support
>> arbitrary declarations:
>>
>> postulate R : P -> Set
>>
>> module #R0 (p : P) where
>> d1
>> module #R1 (f1 : F1) where
>> d2
>>
>> postulate c : (p : P) (let open #R0 p ) (f1 : F1)
>> (let open #R1 f1) (f2 : F2) -> R p
>>
>> module R (p : P) (self : R p) where
>> open #R0 p public
>> f1 : F1
>> f1 = self.f1
>> open #R1 f1 public
>> f2 : F2
>> f2 = self.f2
>> d3
>>
>> Additionally, we can allow "self" to be in scope in d3.
>>
>> Comments welcome,
>> Andreas
>>
>
--
Andreas Abel <>< Du bist der geliebte Mensch.
Department of Computer Science and Engineering
Chalmers and Gothenburg University, Sweden
andreas.abel at gu.se
http://www2.tcs.ifi.lmu.de/~abel/
More information about the Agda-dev
mailing list