使用單一案例判別聯合作為記錄
有時建立只有一種情況的聯合型別來實現類似記錄的型別是有用的:
type Point = Point of float * float
let point1 = Point(0.0, 3.0)
let point2 = Point(-2.5, -4.0)
這些變得非常有用,因為它們可以通過模式匹配以與元組引數相同的方式進行分解:
let (Point(x1, y1)) = point1
// val x1 : float = 0.0
// val y1 : float = 3.0
let distance (Point(x1,y1)) (Point(x2,y2)) =
pown (x2-x1) 2 + pown (y2-y1) 2 |> sqrt
// val distance : Point -> Point -> float
distance point1 point2
// val it : float = 7.433034374