
On Mon, Aug 14, 2006 at 12:15:05AM -0400, kahl@cas.mcmaster.ca wrote:
Unfortunately the relevant prelude functions, like not, &&, all, ..., are all written in a way that they don't work for Silliness.
newtype deriving is really great here. newtype NumberOfBalls = NumberOfBalls Int deriving(Num,Eq,Ord) now you have a type that works almost the same as Int, you can add, substract, etc.. on it. but you can't accidentally add one to a plain old Int. Of course, to take the most advantage of this sort of thing, you want to define your own classes for some shared syntax. class HasSize a where size :: a -> Int class IsEmpty a where isEmpty :: a -> Bool newtype IdMap a = IdMap (Map.Map Id a) deriving(HasSize,Monoid,IsEmpty) and so forth. John -- John Meacham - ⑆repetae.net⑆john⑈