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