[Agda] trouble with let and where
Andreas Abel
andreas.abel at ifi.lmu.de
Tue Dec 1 16:06:34 CET 2015
Hi Nicolas,
(x , (y , z)) = e
can be translated as either
x,y,z = e
x = fst x,y,z
y = fst (snd x,y,z)
z = snd (snd x,y,z)
or as
open Sigma e renaming (fst to x; snd to y,z)
open Sigma y,z renaming (fst to y; snd to z)
The difference is that the second alternative creates anonymous modules
and is probably harder to implement, as the translation cannot be done
at scope-checking time but has to be at type-checking time (we need to
infer the type of e first). In fact, this almost rules out your
alternative, as `open` has to do something on the scope, but we do not
call back to scope checking from the type checker.
Cheers,
Andreas
On 01.12.2015 11:03, Nicolas Pouillard wrote:
> On 11/30/2015 02:26 PM, Andreas Abel wrote:
>> Hi Peter & folks,
>
> Hi all,
>
> [...]
>
>> To implement your suggestion,
>>
>> where
>> (x , y) = e
>>
>> we could do similar as for `let` and interpret this as
>>
>> where
>> x,y = e -- x,y is a private identifier for sharing e's evaluation
>> x = fst x,y
>> y = snd x,y
>
> I'm wondering if this is any different but I would suggest the following
> translation:
>
> where
> open Σ e renaming (proj₁ to x; proj₂ to y)
>
--
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
mailing list