
On 12/11/2010 9:22 AM, Richard O'Keefe wrote:
On 12/11/2010, at 2:17 AM, Michael Snoyman wrote:
So why would you ever need to reuse the same field name in the same module?
data PetOwner data FurnitureOwner
data Cat = Cat { owner :: PetOwner } data Chair = Chair { owner :: FurnitureOwner }
Just the first thing that came to mind, this kind of thing comes up often enough to be an irritant. I'm not sure whether or not TDNR is a good solution to the problem, just pointing out a use case.
I'm afraid it's not a *convincing* use case. It's not convincing because here "owner" *means different things*.
consider "length" ... I have records with the attribute length, length can be given as an Int, Double, Float or maybe as a constructed type "Length", length's use as a record selector would also clash with List.length. All these have the same denotation. should I then seporate into int_length, float_length, or use rec1_length, rec2_length etc etc... for proper name space management why should I have to define each record that defines a length field with different representation in distinct modules, or with different names for the field label when they denote the same thing? This is easily handled in C, Pascal, PL/1, Cobol why not in Haskell ?