type Addrbook = [Person*];; type Person = [(Name Tel? Email* )];; type Name = String;; type Tel = String;; type Email = String;; let fun main (String -> [[Name Tel] *]) fn -> match load_xml fn with | (x & [Person*]) -> mkTelbook x | _ -> raise "Invalid input";; let fun mkTelbook ([Person*] -> [[Name Tel] *]) | [[ (n & Name) (t & Tel) ; _ ]; rest] -> [[n t]; mkTelbook rest ] | [[ Name ; _ ] ; rest] -> mkTelbook rest | [] -> [];; let _ = main "large-cduce.xml";;