let rec check_types types provided_types = match types with
    (name,ty)::rest ->
      if List.mem_assoc name provided_types then
        let other_type = List.assoc name provided_types in
        let _ = 
          try
            check_unified ty other_type
          with
              Linker_error s -> raise_linker_error (concat ["Conflicting type definitions for ";name;": ";s])
        in
          check_types rest provided_types
      else
        check_types rest provided_types
  | [] -> ()