sig
  module type POS =
    sig
      type t
      type repr
      val ctr : Mlpost.Pos.POS.t -> Mlpost.Point.t
      val height : Mlpost.Pos.POS.t -> Mlpost.Num.t
      val width : Mlpost.Pos.POS.t -> Mlpost.Num.t
      val shift :
        Mlpost.Point.t -> Mlpost.Pos.POS.repr -> Mlpost.Pos.POS.repr
      val center : Mlpost.Point.t -> Mlpost.Pos.POS.t -> Mlpost.Pos.POS.repr
      val v : Mlpost.Pos.POS.t -> Mlpost.Pos.POS.repr
    end
  module type SEQ =
    sig
      module P : POS
      type 'a seq
      type t
      type repr = P.repr seq
      val ctr : t -> Point.t
      val height : t -> Num.t
      val width : t -> Num.t
      val shift : Point.t -> repr -> repr
      val center : Point.t -> t -> repr
      val v : t -> repr
      val horizontal :
        ?dx:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position -> P.t Mlpost.Pos.SEQ.seq -> t
      val vertical :
        ?dy:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position -> P.t Mlpost.Pos.SEQ.seq -> t
      val tabular :
        ?dx:Mlpost.Num.t ->
        ?dy:Mlpost.Num.t ->
        ?pos:Mlpost.Command.position ->
        P.t Mlpost.Pos.SEQ.seq Mlpost.Pos.SEQ.seq -> t Mlpost.Pos.SEQ.seq
    end
  module List_ :
    functor (P : POS->
      sig
        module P :
          sig
            type t = P.t
            type repr = P.repr
            val ctr : t -> Point.t
            val height : t -> Num.t
            val width : t -> Num.t
            val shift : Point.t -> repr -> repr
            val center : Point.t -> t -> repr
            val v : t -> repr
          end
        type 'a seq = 'a list
        type t
        type repr = P.repr seq
        val ctr : t -> Point.t
        val height : t -> Num.t
        val width : t -> Num.t
        val shift : Point.t -> repr -> repr
        val center : Point.t -> t -> repr
        val v : t -> repr
        val horizontal : ?dx:Num.t -> ?pos:Command.position -> P.t seq -> t
        val vertical : ?dy:Num.t -> ?pos:Command.position -> P.t seq -> t
        val tabular :
          ?dx:Num.t ->
          ?dy:Num.t -> ?pos:Command.position -> P.t seq seq -> t seq
      end
  module Array_ :
    functor (P : POS->
      sig
        module P :
          sig
            type t = P.t
            type repr = P.repr
            val ctr : t -> Point.t
            val height : t -> Num.t
            val width : t -> Num.t
            val shift : Point.t -> repr -> repr
            val center : Point.t -> t -> repr
            val v : t -> repr
          end
        type 'a seq = 'a array
        type t
        type repr = P.repr seq
        val ctr : t -> Point.t
        val height : t -> Num.t
        val width : t -> Num.t
        val shift : Point.t -> repr -> repr
        val center : Point.t -> t -> repr
        val v : t -> repr
        val horizontal : ?dx:Num.t -> ?pos:Command.position -> P.t seq -> t
        val vertical : ?dy:Num.t -> ?pos:Command.position -> P.t seq -> t
        val tabular :
          ?dx:Num.t ->
          ?dy:Num.t -> ?pos:Command.position -> P.t seq seq -> t seq
      end
  type 'a tree = N of 'a * 'Mlpost.Pos.tree list
  module type TREE =
    sig
      module P : POS
      type t
      type repr = P.repr tree
      val ctr : t -> Point.t
      val height : t -> Num.t
      val width : t -> Num.t
      val shift : Point.t -> repr -> repr
      val center : Point.t -> t -> repr
      val v : t -> repr
      val place :
        ?dx:Mlpost.Num.t -> ?dy:Mlpost.Num.t -> P.t Mlpost.Pos.tree -> t
    end
  module Tree :
    functor (P : POS->
      sig
        module P :
          sig
            type t = P.t
            type repr = P.repr
            val ctr : t -> Point.t
            val height : t -> Num.t
            val width : t -> Num.t
            val shift : Point.t -> repr -> repr
            val center : Point.t -> t -> repr
            val v : t -> repr
          end
        type t
        type repr = P.repr tree
        val ctr : t -> Point.t
        val height : t -> Num.t
        val width : t -> Num.t
        val shift : Point.t -> repr -> repr
        val center : Point.t -> t -> repr
        val v : t -> repr
        val place : ?dx:Num.t -> ?dy:Num.t -> P.t tree -> t
      end
end