Am Freitag, 8. Februar 2008 17:14 schrieb Stefan Monnier: > >> > 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. > > How 'bout treating :+ as similar to `append' rather than similar to `cons'? > Basically treat :+ as taking 2 numbers (rather than a number and > a digit).
So what would (D1 :* D1) :* (D2 :* D2) mean then? > Stefan Best wishes, Wolfgang _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe