    "Abstract supertype of types that support scaling by
     a numeric factor `s ** x`. Examples of such types
     include vectors and matrices.

     Implementations should generally respect the
     following constraints, where relevant:

     - `x == 1**x`

     Implementations of `Scalable` are encouraged to also
     satisfy [[Invertable]], in which case, the following
     identity should be respected:

     - `-x == -1**x`

     Implementations of `Scalable` usually also satisfy
     [[Summable]], in which case, the following identity
     should be respected:

     - `x+x == 2**x`"
    by ("Gavin")
    shared interface Scalable<in Scale, out Value> of Value
            given Value satisfies Scalable<Scale,Value>
            given Scale satisfies Numeric<Scale> {

        "Scale this value by the given scale factor."
        shared formal Value scale(Scale scalar);

    }