[Haskell-cafe] Type Directed Name Resolution

David Menendez dave at zednenem.com
Fri Nov 12 00:21:54 EST 2010


On Thu, Nov 11, 2010 at 10:00 PM, John Lask <jvlask at hotmail.com> wrote:
>> On Thu, Nov 11, 2010 at 8:16 PM, John Lask<jvlask at hotmail.com>  wrote:
>>>
>>> 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...
>>
>> class Lengthy a where
>>   type LengthType a
>>   length :: a ->  LengthType a
>>
>> This extends easily to lenses if you want setters.
>>
>
>
> to make use of the class Lengthy I still need to define record selectors
> with different names, which is exactly the point I am making...
>
> ....ie
>
> data Record = RecLen { rec_length :: ... }
>
> instance Lengthy Record where
>  length = rec_length

Or,

data Record = RecLen Int ...

instance Lengthy Record where
  type LengthType Record = Int
  length (Record l _ _ ...) = l

But yes, this is irritating boilerplate. A more-powerful record system
is clearly preferable.

> The point is that languages are often constructed with a purpose in
> mind, at which they tend to be particularly good. Haskell has
> traditionally been a test bed for type system innovation, which is why
> we all like it so much.

Which is why I'm opposed to TDNR.

-- 
Dave Menendez <dave at zednenem.com>
<http://www.eyrie.org/~zednenem/>


More information about the Haskell-Cafe mailing list