union といえば(ていうか union じゃなくて variant 型とか言うらしいですが)、なんか option 型とかいうのが組み込まれてて、なにやらこれが便利で、えーと無効な値を表現できるとかそんな物体で。
let div x y = if y = 0 then None else Some (x / y) let _ = match div 10 2 with | None -> print_string "invalid\n" | Some v -> Printf.printf "%d\n" v; match div 10 0 with | None -> print_string "invalid\n" | Some v -> Printf.printf "%d\n" v;
実行すると 5 invalid と表示されるわけですね。