On Thu, Nov 11, 2010 at 10:00 PM, John Lask <jvl...@hotmail.com> wrote: >> On Thu, Nov 11, 2010 at 8:16 PM, John Lask<jvl...@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 <d...@zednenem.com> <http://www.eyrie.org/~zednenem/> _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe