Skip to content

Instantly share code, notes, and snippets.

@hironytic
Last active January 26, 2018 08:07
Show Gist options
  • Save hironytic/9cb2f09d22a615dd26c043589c7a4b31 to your computer and use it in GitHub Desktop.
Save hironytic/9cb2f09d22a615dd26c043589c7a4b31 to your computer and use it in GitHub Desktop.
Eitherは論理和でいいと思う理由

次の型 S を考えた場合、

enum S {
  case s1
  case s2
  case s3
}

この型は、「s1 である」という状態と「s2 である」という状態と「s3 である」という状態を表せる。 つまり、この型の値域は、 a == .s1a == .s2a == .s3 を満たすパターンの集合になる。 つまり、任意の sS に対して a == s を満たすパターンの集合と言える。 逆に言えば、s1 でも s2 でも s3 でもない状態、というのを S の値として表すことはできない。

そのように考えると、 Pair<T,U> の値域は、 任意の tT, uU に対して、 a == t && b == u を満たすパターンの集合だと言える。 だから、例えば bU の取り得る値じゃないパターン、というのは Pair<T,U> の値として表すことはできない。

さて、 Either<T, U> の値域は、 任意の tT, uU に対して、 a == t || b == u を満たすパターンの集合だと言える。 こちらは、 bU の取り得る値じゃないパターンというのも表せる。なぜなら、 aT の値のいずれかであれば、 b はなんであろうとこの式を満たすことができるから。むしろ、 aT の値のいずれかだ、と決まった時点で、 bU の取り合える値かどうかすら確認することはできない。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment