simple extension to ghc's record disambiguation rules

Anthony Clayden anthony_clayden at clear.net.nz
Sat Feb 18 08:11:34 CET 2012


> Hi, I'd like to propose an extremely simple extension to
> ghc's record disambiguation rules,
> 

John, I've just posted a proposal on the 'Records in
Haskell' wiki that I think will do the job for you.
"Declared Overloaded Record Fields" (DORF). I'd appreciate
feedback.


> my motivation is that I often have record types with
> multiple constructors but common fields.
> 

This is exactly the use case I'm aiming at.

> 
> so, my proposal is that when you come across something
> like
> 
> (e::RecType) { blah = foo }
> 
> (with an explicit type signature like shown)
> ...

My proposal is the same, except that you don't need a type
sig (or not always).

That record syntax desugars to a call to `set', which is a
method of class `Has' (which also has method `get').

Has/get/set are overloaded for each record/field
combination. The instance is generated at the record
declaration, instead of the H98 record selector function.

> 
> It is also backwards compatible for expressions, but would
> be a new thing for patterns which generally don't allow
> type signatures there.
> 

DORF is backwards compatible with H98 record selectors, in
the sense that polymorphic selectors (using `get') are just
functions.


> It sidesteps type checker interactions by only being
> triggered when an explicit type annotation is included.
> 

(DORF uses usual instance resolution by record type and
field.)

> ideally it would be combined with the 'update' and
> 'label-based pattern-matching' extensions from this page
>
http://hackage.haskell.org/trac/haskell-prime/wiki/ExistingRecords
> 
>     John
> 

DORF supports update and pattern matching by label, per
-XDismabiguateRecordFields and friends.

Anthony




More information about the Haskell-prime mailing list