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