exception AngularMomentumError of string type t = | S | P | D | F | G | H | I | J | K | L | M | N | O let of_char = function | 's' | 'S' -> S | 'p' | 'P' -> P | 'd' | 'D' -> D | 'f' | 'F' -> F | 'g' | 'G' -> G | 'h' | 'H' -> H | 'i' | 'I' -> I | 'j' | 'J' -> J | 'k' | 'K' -> K | 'l' | 'L' -> L | 'm' | 'M' -> M | 'n' | 'N' -> N | 'o' | 'O' -> O | c -> raise (AngularMomentumError (String.make 1 c)) let to_string = function | S -> "S" | P -> "P" | D -> "D" | F -> "F" | G -> "G" | H -> "H" | I -> "I" | J -> "J" | K -> "K" | L -> "L" | M -> "M" | N -> "N" | O -> "O" let to_char = function | S -> 'S' | P -> 'P' | D -> 'D' | F -> 'F' | G -> 'G' | H -> 'H' | I -> 'I' | J -> 'J' | K -> 'K' | L -> 'L' | M -> 'M' | N -> 'N' | O -> 'O' let to_int = function | S -> 0 | P -> 1 | D -> 2 | F -> 3 | G -> 4 | H -> 5 | I -> 6 | J -> 7 | K -> 8 | L -> 9 | M -> 10 | N -> 11 | O -> 12 let of_int = function | 0 -> S | 1 -> P | 2 -> D | 3 -> F | 4 -> G | 5 -> H | 6 -> I | 7 -> J | 8 -> K | 9 -> L | 10 -> M | 11 -> N | 12 -> O | c -> raise (AngularMomentumError (string_of_int c))