perhaps

John Meacham john at repetae.net
Mon Aug 14 12:40:12 EDT 2006


On Mon, Aug 14, 2006 at 12:15:05AM -0400, kahl at 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⑈


More information about the Libraries mailing list