[Haskell-cafe] Re: Implementing fixed-sized vectors (using datatype algebra?)

Wolfgang Jeltsch g9ks157k at acme.softbase.org
Fri Feb 8 10:10:59 EST 2008


Am Donnerstag, 7. Februar 2008 16:31 schrieben Sie:
> On Feb 7, 2008 4:16 PM, Wolfgang Jeltsch <g9ks157k at acme.softbase.org> 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


More information about the Haskell-Cafe mailing list