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