Am Donnerstag, 7. Februar 2008 16:31 schrieben Sie: > On Feb 7, 2008 4:16 PM, Wolfgang Jeltsch <[EMAIL PROTECTED]> wrote: > […]
> > You seem to write 12 as 1 :+ 2 instead of () :+ 1 :+ 2. But I think, the > > latter representation should probably be prefered. With it, :+ always > > has a number as its left argument and a digit as its right. Without the > > () :+ we get ugly exceptional cases. > > You can see this, for example, in the instance > > declarations for Compare. With the second representation, we could > > reduce the number of instances dramatically. We would define a > > comparison of digits (verbose) and than a comparison of numbers based on > > the digit comparison (not verbose). > > Even if () would be preferred from the programmers point of view (I'm > not sure how much we could reduce the number of instances though), it > makes the representation less attractive on the user-side. Anyone > using the library would find it annoying and would wonder why is it > neccessary. I wouldn’t wonder. Leaving out the () :* part just works because our type-level “values” are not typed, i.e., there aren’t different kinds Digit and Number but only kind *. If :+ would be a data constructor (on the value level), it would take a number and a digit argument which would forbid using a digit as its left argument. So I consider using a digit on the left as “unclean”. It’s similar to using a number as the second part of a cons cell in LISP. > […] Best wishes, Wolfgang _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe