Enum, Bounded, and Arithmetic Sequences

Johannes Waldmann joe@informatik.uni-leipzig.de
Wed, 25 Jun 2003 10:20:37 +0200 (CEST)


Some thoughts on Enum, Bounded, and [ x .. y ] notation.


Sometimes I want to write

>  x :: Foo <- [ .. ] 

that is, an enumeration with both implicit lower and upper bound.
This is useful if the type is both an instance of Enum and Bounded.

Example: in module Foo, you have

> data Foo = A | B | C deriving ( Enum, Bounded )

and in another module Bar, I want to loop over all possible Foo values,
but - I don't want to change the text of Bar 
after I added one new Foo value (anywhere in the enumeration).


A related point: the Haskell definition states that

> enumFrom and enumFromThen should be defined with an implicit bound, thus:
>   enumFrom     x   = enumFromTo     x maxBound
> ..

This suggests that this `maxBound' is the method of class Bounded.
I think this should be enforced -
the *only* method in Enum should be `enumFromTo'.

If one writes [ x .. ], then the compiler expands this to 
`enumFromTo x  maxBound', and therefore adds a `Bounded' constraint.
Likewise, [ .. y ] expands to `enumFromTo minBound y',
and [ .. ] to  `enumFromTo minBound maxBound' .

I think this would make matters more simple and orthogonal.


PS: and enumFromThenTo should just be removed, alongside n+k patterns :-)
-- 
-- Johannes Waldmann ---- http://www.informatik.uni-leipzig.de/~joe/ --
-- joe@informatik.uni-leipzig.de -- phone/fax (+49) 341 9732 204/209 --