Re: [Haskell-cafe] Constructor constraints

2005-09-20 Thread Malcolm Wallace
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


Re: [Haskell-cafe] Constructor constraints

2005-09-20 Thread Rich Neswold
On 9/20/05, Malcolm Wallace [EMAIL PROTECTED] wrote:
You can make a 'smart' constructor function, and hide the real dataconstructor so that it cannot be used:Thanks! I'll give your solution a try.-- RichAIM : rnezzy
ICQ : 174908475
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe