let range ?(bottom=false) vl =
let l = List.sort ~cmp:(fun v1 v2 -> Version.compare v2 v1) vl in
let rec aux acc = function
|(None,[]) -> acc
|(None,a::t) -> aux ((`Hi a)::acc) (Some a,t)
|(Some b,a::t) -> aux ((`In (a,b))::(`Eq b)::acc) (Some a,t)
|(Some b,[]) when bottom = false -> (`Eq b)::acc
|(Some b,[]) -> (`Lo b)::(`Eq b)::acc
in
aux [] (None,l)