Prelude and (:) and []((:), []) bugs?

Ian Lynagh igloo@earth.li
Thu, 20 Sep 2001 14:10:01 +0100


On Thu, Sep 20, 2001 at 01:32:54PM +0100, Simon Marlow wrote:
> 
> > As far as I can tell, the report doesn't allow (:) or []((:), 
> > []) in the
> > export list, yet the hugs prelude has the first and the GHC 
> > prelude has
> > the second. Have I missed something that allows them or is 
> > this a bug in
> > the preludes or the report?
> 
> (:) is allowed in an export list; it is just a normal operator.  

An export is

export -> qvar
       |  qtycon [(..) | ( qcname1 , ... , qcnamen )] (n>=0)
       |  qtycls [(..) | ( qvar1 , ... , qvarn )] (n>=0)
       |  module modid

and we need to match (:). We can clearly reduce this to

export -> qvar | qtycon | qtycls

Now apply qvar -> qvarid | ( qvarsym )
          qtycon -> [ modid . ] tycon
          qtycls -> [ modid . ] tycls

export -> qvarid | ( qvarsym ) | [modid .] tycon | [modid .] tycls

Apply qvarid -> [ modid . ] varid
      qvarsym -> [ modid . ] varsym

export -> [ modid . ] varid | ( [ modid . ] varsym )
       |  [ modid . ] tycon | [ modid . ] tycls

As there is no . we can reduce this to

export -> varid | ( varsym ) | tycon | tycls

Now
varid -> (small {small | large | digit | ' })<reservedid>
and ( is not in small, so we can eliminate that.

tycon -> conid, tycls -> conid and
conid -> large {small | large | digit | ' }
( is also not in large, so we can eliminate that.

Therefore we need to match : with varsym. But
varsym -> ( symbol {symbol | :})<reservedop>
and
reservedop -> .. | : | :: | = | \ | | | <- | -> | @ | ~ | =>

Did I screw up somewhere?

> GHC has a couple of extensions to export lists: we allow gcon instead of
> just qcon, and gtycon instead of qtycon.  These are quite natural
> extensions, and just reduce the amount of built-in compiler magic needed
> to express the Prelude.

I think it would be nice if the prelude was valid Haskell 98 - if these
extensions are useful and natural, and as I can't see how they could
break existing code, could they be put into the revised report?


Thanks
Ian