datatype 'a tree_set = tip | node of {value : 'a, left : 'a tree_set ref, right : 'a tree_set ref}; fun add a = let fun loop t = case ! t of tip => (t := node {value = a, left = ref tip, right = ref tip}; true) | node n => if a < #value n then loop (#left n) else if a > #value n then loop (#right n) else false in loop end