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