Records in Haskell

Hi,
Greg Wever wrote:
> What is the use case for changing the type of a record field on
> update?
Lots.
For example, I often use in the context of abstract syntax parametrised
on the type of some kind of "annotation". A transformation may then
take an abstract syntax tree with one type of annotation onto an
abstract syntax tree with a different type of annotation. And if I
opted to use named fields for my abstract syntax tree nodes, as I tend
to do, polymorphic record update is exactly what I need.
> This seems to make things harder on the implementer and harder on
> users to reason about the types in their program.
Can't comment on the former, but I don't find the latter compelling.
I find it completely natural and in a well-documented program there
will be enough explicit type information around to make it pretty clear
what is going on.
> I think it would be easier on everyone to just remove this capability
I'd say that would be very unfortunate.
> or have an explicit syntax for changing the type to make it easier
> for both implementer (to distinguish) and user (to declare intent).
Also sounds unfortunate, and might lead to very repetitive code?
I have not followed this thread close enough to be able to say for
sure, but if the upshot is that code like the one I am alluding to
above would need an annotation wherever there is a polymorphic record
update today, then that would not be very nice.
For all its flaws, the present Haskell "record" system is far from as
useless as it sometimes is made out to be, and it would be a pity
if the price for fixing some of those flaws were to lose something
as useful as update of polymorphic record fields.
Best,
/Henrik
--
Henrik Nilsson
School of Computer Science
The University of Nottingham
nhn at cs.nott.ac.uk