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
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to