1234567891011121314151617181920212223242526272829openLangopenIlopenIl.PrintopenUtil.Sourcetypet=id*iterlistletto_string(id,iters)=string_of_varidid^String.concat""(List.mapstring_of_iteriters)letcompare_iter(iter_a:iter)(iter_b:iter)=match(iter_a,iter_b)with|Opt,Opt|List,List->0|Opt,List->-1|List,Opt->1letreccompare_itersiters_aiters_b=match(iters_a,iters_b)with|[],[]->0|[],_::_->-1|_::_,[]->1|iter_a::iters_a,iter_b::iters_b->letc=compare_iteriter_aiter_binifc<>0thencelsecompare_itersiters_aiters_b(* Compare variables by id, then by iters. *)letcompare(id_a,iters_a)(id_b,iters_b)=letcmp_id=String.compareid_a.itid_b.itinifcmp_id=0thencompare_itersiters_aiters_belsecmp_id