
2009/2/20 David Menendez
I like the Min/Max monoids, and the possibility of adding something like AddBounds (although I'd prefer a name like "Bounded"; "Bounded Integer" reads better than "AddBounds Integer").
We already have a Bounded typeclass, so things would get confusing. How about BoundsAdded Integer?
One possible snag is that, so far as I know, there's no explicit requirement that a type that instantiates Ord and Bounded should satisfy the laws,
min maxBound a = a = min a maxBound max minBound a = a = max a minBound
We're just assuming (reasonably) that instances will always work out that way. (Although, I guess we're making the same assumption with Sum and Prod.)
You could do something like class (Bounded a, Ord a) => BoundedOrd a where minB :: a -> a -> a minB a b | b == maxBound = a | a == maxBound = b | (a == minBound) || (b == minBound) = minBound | otherwise = min a b maxB :: a -> a -> a maxB a b | b == minBound = a | a == minBound = b | (a == maxBound) || (b == maxBound) = maxBound | otherwise = max a b And have the types inside Min and Max monoids need to be instances of this type. It depends how much we are trusting the implementors of min and max... It also doesn't stop people reimplementing them, perhaps we'll have to wait for conal's type class morphisms (I haven't fully digested these yet)? Will Pearson