union type (F#)

"Foundations of F#" には "union type" って書いてあるんだけど、日本語訳すると何になるんだろう?

(* ジャンケン型
   列挙型(enum)のように定義できる *)
type Janken = Goo | Choki | Pah

let janken = Choki
printfn "%A" janken   // "Choki" と表示
(* Janken 型のパターンマッチング *)
let jankenPon a b =
  match (a, b) with
  | (Goo, Choki) | (Choki, Pah) | (Pah, Goo) -> "win"
  | (Choki, Goo) | (Pah, Choki) | (Goo, Pah) -> "lose"
  | _ -> "draw"

printfn "janken = %s" (jankenPon Goo Choki)   // "win" と表示
printfn "janken = %s" (jankenPon Pah Pah)     // "draw" と表示
(* float ベースの角度型 *)
type Angle =
  | Degree of float
  | Radian of float
  
(* Angle値の定義 *)
let angle1 = Degree 90.0
let angle2 = Radian (0.5 * System.Math.PI)
(* Angle型から degree 値を取得する関数 *)
let getDegree (angle : Angle) =
  match angle with
  | Degree deg -> deg
  | Radian rad -> rad * 180.0 / System.Math.PI

(* Angle型から radian 値を取得する関数 *)
let getRadian (angle : Angle) =
  match angle with
  | Degree deg -> deg * System.Math.PI / 180.0
  | Radian rad -> rad

(* angle1 と angle2 の degree 値と radian 値をそれぞれ出力 *)
printfn "angle1 = %f [deg]" (getDegree angle1)
printfn "angle2 = %f [deg]" (getDegree angle2)
printfn "angle1 = %f [rad]" (getRadian angle1)
printfn "angle2 = %f [rad]" (getRadian angle2)
(* 二分木の定義
   - 'a はパラメタライズされた型
   - 再帰的な型定義
*)
type BinaryTree<'a> =
  | BinaryNode  of BinaryTree<'a> * BinaryTree<'a>
  | BinaryLeaf  of 'a

(* 二分木の構築 *)
let tree =
  BinaryNode(
    BinaryNode (BinaryLeaf 1, BinaryLeaf 2),
    BinaryNode (BinaryLeaf 3, BinaryNode (BinaryLeaf 4, BinaryLeaf 5)))
(* 二分木を出力する関数 *)
let rec printBinaryTree tree =
  match tree with
  | BinaryNode (t1, t2) ->
      printBinaryTree t1
      printBinaryTree t2
  | BinaryLeaf value -> 
      printfn "value = %A" value

printBinaryTree tree