First mail
Restrict_list == restrict Interval_expression
Interval_expression == Interval | "{" Interval Operator Interval "}"
Interval == Explicit_interval | Implicit_Interval
Explicit_interval == Class_type ".." Class_type
Implicit_interval == Class_type | ">" Class_type | Class_type ">"
Interval_operator == "+" | "-" | "*"
Note that operators use full parenthesization so there is no ambiguity. Maybe
parentheses would be better than braces.
Instead of >T and T> we could use .. T and T .., i.e. allow omitting either
but not both of the two Class_type in Explicit_interval.
Having played with both I tend to like the ">" forms better but am not really
sure.
Semantics:
An Interval_expression denotes a (possibly empty) subset of the types in the
universe. T .. U is the set of all types that conform
to T and to which U conforms. T is an abbreviation for T .. T. T> is an
abbreviation for T .. NONE. >T is an abbreviation for ANY ..
T. "+" is union, "-" set difference, "*" intersection.
Examples:
ANY .. NONE -- Fits all types
ANY> -- Means the same
>NONE -- Means the same
T> -- T and conforming types
>T -- Types conforming to T
T .. U -- Types conforming to T and to which U conforms
X .. Y -- Types conforming to X and to which Y conforms
{T .. U} + {X .. Y} -- Types that satisfy any of the preceding two
conditions
{T .. U} - {X .. Y} -- Types that satisfy the first of those but not the
second
{T .. U} * {X .. Y} -- Types that satisfy both
etc.
a: T is an abbreviation for e.g. a: restrict {T>}.
Comparison with last proposed notation:
a1: ANIMAL restrict ANIMAL -- Previously accept
{ANIMAL}: monomorphic
a2: ANIMAL restrict ANIMAL> -- `restrict' clause is
superfluous
a3: ANIMAL restrict {ANIMAL> - ANIMAL} -- Strictly polymorphic.
a4: ANIMAL restrict OCTOPUS> -- Previously accept {all
OCTOPUS}
a5: ANIMAL restrict {CAT> + OCTOPUS} -- Previously accept {all CAT,
OCTOPUS}
a6: ANIMAL restrict {ANIMAL> - CAT>} -- Previously reject {CAT}
a7: ANIMAL restrict {FELINE> - {CAT .. SIAMESE}}
-- No previous
equivalent
I don't have any good example with intersection.
Second mail contained conformance rule
T restrict S conforms to T restrict S' only if S is a subset of S'