GHC changes

Steffen Mazanek steffen.mazanek at
Wed Oct 29 11:01:20 EST 2003

Hello GHC freaks,

I have made some changes to the GHC source
code (6.0.1) and I would really welcome your
feedback, whether they are ok for my task
(first step: introduce record expressions
of the shape 'struct {x1=e1,x2=e2,...,xn=en}'):

* added

 ("struct", ITstruct, bit glaExtsBit),

 to ghcExtensionKeywordsFM and
 ITstruct to Token
 in Lex.lhs
* added

 | Struct [(id, HsExpr id)]

 to data type HsExpr id in HsExpr.lhs
 Please tell me, what is this id for? Can it
 be used in this context? What is FastString?
* added

  'struct'       { ITstruct }

 to the token part of Parser.y (please tell me, why
 in the lexer we declare ITstruct to represent
 the keyword "struct" and in the parser specification
 we turn back to 'struct'),

    : structassignments ',' structassignment      { $3 : $1 }
    | structassignments ','         { $1 }
    | structassignment { [$1] }
    | {- empty -}      { [] }
    : qvar '=' exp       { ($1,$3) }

 as new production rules (what type has structassignments? I can not simply
 write [(id,HsExpr id)], is qvar '=' exp appropriate? I do not understand
 structassignments completely (I have tried to make it analog to fbinds)),
 extended exp10 by

 | 'struct' '{' structassignments '}'  {Struct $3}
 | '{' structassignments '}' {Struct $2}

 and finally added

 | Struct [(id, HsExpr id)]

 to HsExpr

How can I speed up the recompilation process? I just want to check, whether my
changes are compilable or not, is it possible to switch off optimization and
other time consuming transformations?

At next I will try to master the following steps:
* embed the remaining new production rules to the parser, e.g., record
  type declaration, selectors, particular kind annotations
* adaptation of the type checker
* reduction of struct expressions

Thank you very much,
Steffen Mazanek

More information about the Glasgow-haskell-users mailing list