Re: simple extension to ghc's record disambiguation rules

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
participants (1)
-
Anthony Clayden