A sample revised prelude for numeric classes

Joe English jenglish@flightlab.com
Sun, 11 Feb 2001 19:11:25 -0800

Dylan Thurston wrote:
> I've started writing up a more concrete proposal for what I'd like the
> Prelude to look like in terms of numeric classes.

I like this proposal a lot.  The organization is closer to
traditional mathematical structures than the current
Prelude, but not as intimidating as Mechveliani's
Basic Algebra Proposal.  A very nice balance, IMO.

A couple of requests:

> > module Lattice where
> > class Lattice a where
> >     meet, join :: a -> a -> a

Could this be split into

    class SemiLattice a where
	join :: a -> a -> a


    class (SemiLattice a) => Lattice a where
	meet :: a -> a -> a

I run across a lot of structures which could usefully
be modeled as semilattices, but lack a 'meet' operation.

> It would be reasonable to make Ord a
> subclass of this, but it would probably complicate the class heirarchy
> too much for the gain.

In a similar vein, I'd really like to see the Ord class
split up:

    class PartialOrder a where
    	(<), (>)   :: a -> a -> Bool

    class (Eq a, PartialOrder a) => Ord a where
	compare    :: a -> a -> Ordering
	(<=), (>=) :: a -> a -> Bool
	max, min   :: a -> a -> a

Perhaps it would make sense for PartialOrder to be a
superclass of Lattice?

--Joe English