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