functor (P : Deriving_Dump.Dump->
  functor (E : sig type a = P.a val eq : a -> a -> bool end->
    functor
      (T : sig
             type a = P.a
             val type_rep : Deriving_Typeable.TypeRep.t Lazy.t
             val has_type : Deriving_Typeable.dynamic -> bool
             val cast : Deriving_Typeable.dynamic -> a option
             val throwing_cast : Deriving_Typeable.dynamic -> a
             val make_dynamic : a -> Deriving_Typeable.dynamic
             val mk : a -> Deriving_Typeable.dynamic
           end->
      sig
        type a = P.a
        module Typeable :
          sig
            type a = a
            val type_rep : Deriving_Typeable.TypeRep.t Lazy.t
            val has_type : Deriving_Typeable.dynamic -> bool
            val cast : Deriving_Typeable.dynamic -> a option
            val throwing_cast : Deriving_Typeable.dynamic -> a
            val make_dynamic : a -> Deriving_Typeable.dynamic
            val mk : a -> Deriving_Typeable.dynamic
          end
        module Eq : sig type a = a val eq : a -> a -> bool end
        val pickle : a -> id Write.m
        val unpickle : id -> a Read.m
        val to_buffer : Buffer.t -> a -> unit
        val to_string : a -> string
        val to_channel : out_channel -> a -> unit
        val from_stream : char Stream.t -> a
        val from_string : string -> a
        val from_channel : in_channel -> a
      end