[Haskell-cafe] Re: [Haskell] MR details (was: Implicit type of
numeric constants)
Bernie Pope
bjpop at csse.unimelb.edu.au
Wed Sep 27 00:32:25 EDT 2006
On 26/09/2006, at 12:19 AM, Christian Sievers wrote:
> Bernie Pope answered:
>
>>> 1. Why do the rules of the monomorphism restriction explicitly
>>> mention
>>> *simple* pattern bindings?
>>> Where is the difference, especially as there is a translation to
>>> simple pattern bindings?
>>> Why should
>>>
>>> p | "a"=="b" = 2
>>> | otherwise = 3
>>>
>>> be treated different than
>>>
>>> p = if "a"=="b" then 2 else 3
>>
>>
>> They are the same (both are simple pattern bindings). The report says
>> in section 4.4.3.2 that the first can be translated into the second.
>
> Indeed, I meant to allude to this translation.
>
>> A simple pattern binding is one where the lhs is a variable only.
>
> That's consistent with the second reason for rule one of the MR.
>
> However, the mentioned section 4.4.3.2 defines it differently:
>
> A simple pattern binding has form p = e.
>
> And if there is any doubt about what p stands for, it goes on:
>
> The pattern p ...
>
> Contrasting to that:
>
> The general form of a pattern binding is p match, where a match
> is the same
> structure as for function bindings above; in other words, a
> pattern binding
> is:
>
> p | g1 = e1
> | g2 = e2
> ...
> | gm = em
> where { decls }
>
>
> So according to this definition, a pattern binding is simple iff
> there are no guards (unless they are in the expression).
> Also the translation to a "simple pattern binding" only gets rid of
> guards.
>
> So there seems to be an error in the report, which can be fixed by
> either
> redefining "simple pattern binding", or using a differnet
> description in the
> MR.
Aha,
Christian I see what you mean. It seems I did not read section
4.4.3.2 carefully. In fact
I think I was interpreting that section in light of the MR.
So I am now as puzzled as you are.
Anyway, thanks for persisting on this point.
Cheers,
Bernie.
More information about the Haskell-Cafe
mailing list