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