Add a Unicode.Scalar.ASCII type (another alternative naming/namespace is Unicode.ASCIIScalar). This type represents the ASCII compatible subset of Unicode.Scalar.
Until something like compile time constant expressions and compile time asserts (static asserts) lands in the language, the compiler would have a special range check for this type:
let s: Unicode.Scalar.ASCII = 'a' // OK
let s: Unicode.Scalar.ASCII = 'ÿ' // error: ÿ is not in the ASCII compatible subset of unicode