functor (Domain : Domain->
  sig
    type state = Domain.t
    type t
    val empty : unit -> t
    val merge_set_return_new : state list -> t -> state list
    val join : t -> state Eval.or_bottom
    val to_list : t -> state list
    val pretty : Format.formatter -> t -> unit
  end