Brian Troutwine wrote:
> Hello all.
>> I would like to define a data type that is the super-set of several
> types and then each of the proper subset types. For example:
>> data Foo = One | Two | Three | Four
> data Odd = One | Three
> data Even = Two | Four
>> This, of course, does not work. It seems that such a thing should
> possible to express entirely in the type system, but I cannot think of
> how. Would someone be so kind as to explain how this sort of thing can
> be accomplished?
You might want to look at Johan Nordlander's O'Haskell. It's a dialect
of Haskell with such subtyping, designed and implemented while ago.
Recently there was a proposal (but not an implementation yet) of
subtyping data types in general with recursion and including GADTs
http://portal.acm.org/citation.cfm?id=1411286.1411297 (I want to work on
this again some time later again). But neither of these work is not
implemented as an extension feature in major Haskell implementations
like GHC or Hugs. I want to push this work further some time later on.
FYI, there exist a functional language which you can express this kind
of idea though. For example, in OCaml, you can use polymorphic variants.