Rich Neswold <[EMAIL PROTECTED]> writes: > For instance, I want to make a new type that is a 4 element tuple > where each element is greater than or equal to the previous entry. > > data Category = Membership a a a a
You can make a 'smart' constructor function, and hide the real data constructor so that it cannot be used: module Category (Category(),membership) where data Category = Membership a a a a membership :: Ord a => a -> a -> a -> a -> Category a membership a b c d | d>=c && c>=b && b>=a = Membership a b c d | otherwise = error "bad values" However, you probably don't really want your program to die with "error" when you get badly-constrained data, so it might be better to look into something like the Maybe type for your smart constructor: membership :: Ord a => a -> a -> a -> a -> Maybe (Category a) so you can catch the failing cases and do something sensible with them. Regards, Malcolm _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe