次の型 S
を考えた場合、
enum S {
case s1
case s2
case s3
}
この型は、「s1
である」という状態と「s2
である」という状態と「s3
である」という状態を表せる。
つまり、この型の値域は、 a == .s1
と a == .s2
と a == .s3
を満たすパターンの集合になる。
つまり、任意の s
∈S
に対して a == s
を満たすパターンの集合と言える。
逆に言えば、s1
でも s2
でも s3
でもない状態、というのを S
の値として表すことはできない。
そのように考えると、 Pair<T,U>
の値域は、
任意の t
∈T
, u
∈U
に対して、 a == t && b == u
を満たすパターンの集合だと言える。
だから、例えば b
が U
の取り得る値じゃないパターン、というのは Pair<T,U>
の値として表すことはできない。
さて、 Either<T, U>
の値域は、
任意の t
∈T
, u
∈U
に対して、 a == t || b == u
を満たすパターンの集合だと言える。
こちらは、 b
が U
の取り得る値じゃないパターンというのも表せる。なぜなら、 a
が T
の値のいずれかであれば、 b
はなんであろうとこの式を満たすことができるから。むしろ、 a
が T
の値のいずれかだ、と決まった時点で、 b
が U
の取り合える値かどうかすら確認することはできない。