[Agda] moving common from `with'
Andreas Abel
andreas.abel at ifi.lmu.de
Mon Oct 15 18:59:14 CEST 2012
On 14.10.2012 16:44, Dan Doel wrote:
> On Sun, Oct 14, 2012 at 7:08 AM, Serge D. Mechveliani <mechvel at botik.ru> wrote:
>>> thus, there is no place to put a 'where' there. Haskell's 'where' can
>>> also be used in expressions. But it allows funny stuff like
>>>
>>> a = let x = 5
>>> in x where x = 4
>>>
>>> Well, I could not tell whether the value of a should be 4 or 5 here...
>>>
>>> Adding 'where' to expressions has beend requested before...
>>>
>>
>> I join this request.
>> Concerning `let' and `where', Haskell has proved good.
>> And it is desirable to follow Haskell in this point (as in many others).
>
> No, Haskell's where cannot be attached to expressions. It is attached
> to definitions exactly like Agda's. For instance, in the example
> given, the 'where x = 4' is attached to the 'a =' definition, despite
> the confusing layout. This is kind of obvious if you ask what a there
> is: it's 5.
You are right. I though so as well, but then confused myself when
looking at the grammar.
http://www.haskell.org/onlinereport/syntax-iso.html
It says
alt -> pat -> exp [where decls]
meaning 'where' clauses can be attached to expressions in case
alternatives, but not in general.
Also my example above is laid out in a confusing manner, but it is parsed as
a = let x = 5 in x
where
x = 4
say
decl
where
decl
> The difference in Agda is that expressions do not contain the type of
> definitions that are allowed to have where attached in them. In
> Haskell, any declaration in a let and any alternative in a case may
> have a where attached. But this is not the case in Agda.
Cheers,
Andreas
--
Andreas Abel <>< Du bist der geliebte Mensch.
Theoretical Computer Science, University of Munich
Oettingenstr. 67, D-80538 Munich, GERMANY
andreas.abel at ifi.lmu.de
http://www2.tcs.ifi.lmu.de/~abel/
More information about the Agda
mailing list