struct
  include Core.Std.Set
  let to_stream t = Stream.of_list (to_list t)
  let of_stream xs =
    Stream.fold xs ~init:Poly.empty ~f:(fun accu e -> Poly.add accu e) ;
end