[Haskell-cafe] RFE: Extensible algebraic user-defined data types?
Simon Peyton-Jones
simonpj at microsoft.com
Fri Apr 29 03:54:26 EDT 2005
| Suppose I want to extend this datatype to the one including
| possibility of neither Left or Right (i. e. None). Currently I have to
| use Maybe Either, so my options are:
|
| Just (Left a)
| Just (Right b)
| Nothing
|
| If I could extend the Either datatype I might have (syntax may be
| different, this is just an example)
|
| data NEither a b = <Either a b> | None
As Ben says, this is altogether a bigger deal. You can imagine two main
approaches
1. NEither simply "macro-includes" the constructors of Either in
NEither, but they are different constructors. So Either.Left and
NEither.Left would be different, and incompatible constructors. This is
simple, but clunky; for example, now you'd need to use a qualified name
to disambiguate which you meant, whenever you used Left.
2. Use sub-typing, so that a value (Left x) is *both* in type Either
and in type NEither. This opens a very large and complicated design
space, as Ben mentioned.
Simon
More information about the Haskell-Cafe
mailing list