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