functor (X : Set.OrderedType->
  sig
    module rec Style :
      sig
        type t = {
          pet : Diagrams.Transfo.Pet.t;
          transfo : Diagrams.Transfo.??.transfo;
        }
        and transfo = X.t -> X.t
      end
    and Pet :
      sig
        type t
        val name : Diagrams.Transfo.??.-> string
        val append :
          Diagrams.Transfo.??.->
          Diagrams.Transfo.Style.t list ->
          Diagrams.Transfo.Style.t -> Diagrams.Transfo.Style.t list
        val ( = ) : Diagrams.Transfo.??.-> Diagrams.Transfo.??.-> bool
        val register :
          ?depends:Diagrams.Transfo.??.t list ->
          ?codepends:Diagrams.Transfo.??.t list ->
          ?append:(Diagrams.Transfo.Style.t list ->
                   Diagrams.Transfo.Style.t -> Diagrams.Transfo.Style.t list) ->
          string ->
          (Diagrams.Transfo.??.-> 'a) -> 'a * Diagrams.Transfo.??.t
        module Map :
          sig
            type key = t
            type +'a t
            val empty : 'a t
            val is_empty : 'a t -> bool
            val mem : key -> 'a t -> bool
            val add : key -> '-> 'a t -> 'a t
            val singleton : key -> '-> 'a t
            val remove : key -> 'a t -> 'a t
            val merge :
              (key -> 'a option -> 'b option -> 'c option) ->
              'a t -> 'b t -> 'c t
            val union :
              (key -> '-> '-> 'a option) -> 'a t -> 'a t -> 'a t
            val compare : ('-> '-> int) -> 'a t -> 'a t -> int
            val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool
            val iter : (key -> '-> unit) -> 'a t -> unit
            val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b
            val for_all : (key -> '-> bool) -> 'a t -> bool
            val exists : (key -> '-> bool) -> 'a t -> bool
            val filter : (key -> '-> bool) -> 'a t -> 'a t
            val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t
            val cardinal : 'a t -> int
            val bindings : 'a t -> (key * 'a) list
            val min_binding : 'a t -> key * 'a
            val min_binding_opt : 'a t -> (key * 'a) option
            val max_binding : 'a t -> key * 'a
            val max_binding_opt : 'a t -> (key * 'a) option
            val choose : 'a t -> key * 'a
            val choose_opt : 'a t -> (key * 'a) option
            val split : key -> 'a t -> 'a t * 'a option * 'a t
            val find : key -> 'a t -> 'a
            val find_opt : key -> 'a t -> 'a option
            val find_first : (key -> bool) -> 'a t -> key * 'a
            val find_first_opt : (key -> bool) -> 'a t -> (key * 'a) option
            val find_last : (key -> bool) -> 'a t -> key * 'a
            val find_last_opt : (key -> bool) -> 'a t -> (key * 'a) option
            val map : ('-> 'b) -> 'a t -> 'b t
            val mapi : (key -> '-> 'b) -> 'a t -> 'b t
          end
      end
    val transform : Diagrams.Transfo.Style.t list -> X.t -> X.t
  end