functor
  (X : sig
         val top : v
         val narrow : v -> v -> v
         val bottom_is_strict : bool
       end->
  sig val narrow : t -> t -> t end