
Hi Jules,
What this leads us towards is that it might be rather nice (perhaps even nice enough to build into a compiler) to be able to derive, for each type with multiple constructors, a type 'which is the enumeration of the constructors'. I.e. a type with the same constructors (up to some namespace fix like prepending with C) but all nullary:
data Atom = Null | MyInt Int | MyString String
derives...
data AtomCons = CNull | CMyInt | CMyString deriving (Ord,Eq,Enum,Show)
and a function
constr :: Atom -> AtomCons
If you can derive Enum for all possible constructors (supplying undefined for all fields) then people can do this already: isBool x = fromEnum x `elem` [fromEnum LT .. fromEnum GT] And I'm sure with an "elemCtorSet" you could automate most of this away in to a tidy little function. As a side note, this is what Derive already does :-) Thanks Neil