> Please note the biggest problem of inheritance-based interfaces: you cannot
> add one to a type already in existence when you define the interface
Certainly you cannot; that is the point - not interfaces state, what types
satisfy (implement) them, but the other way round, types state, what they
implement, and interfaces can only restrict, what types can state that (say,
providing signatures for required procs); not satisfying the interface's
restrictions results not in rejecting for the type to be considered as being of
that interface, but in a compile-time error. E.g., supposing concepts-syntax
for interfaces:
type
I = interface x
p(x)
T = distinct int implements I
# p(t: T) = discard
This should result in a compile-time error, unless the last line is uncommented.
And at the same time
type
I = interface x
p(x)
T = distinct int
proc p(t: T) = discard
echo T is I # -> false
, because `T` here is not intended to be `I`.