sig
  type direction
  val vec : Mlpost.Point.t -> Mlpost.Path.direction
  val curl : float -> Mlpost.Path.direction
  val noDir : Mlpost.Path.direction
  type knot
  val knotp :
    ?l:Mlpost.Path.direction ->
    ?r:Mlpost.Path.direction -> Mlpost.Point.t -> Mlpost.Path.knot
  val knotlist :
    (Mlpost.Path.direction * Mlpost.Point.t * Mlpost.Path.direction) list ->
    Mlpost.Path.knot list
  type joint
  val jLine : Mlpost.Path.joint
  val jCurve : Mlpost.Path.joint
  val jCurveNoInflex : Mlpost.Path.joint
  val jTension : float -> float -> Mlpost.Path.joint
  val jControls : Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Path.joint
  type t
  val knot :
    ?l:Mlpost.Path.direction ->
    ?r:Mlpost.Path.direction ->
    ?scale:(float -> Mlpost.Num.t) -> float * float -> Mlpost.Path.knot
  val knotn :
    ?l:Mlpost.Path.direction ->
    ?r:Mlpost.Path.direction ->
    Mlpost.Num.t * Mlpost.Num.t -> Mlpost.Path.knot
  val path :
    ?style:Mlpost.Path.joint ->
    ?cycle:Mlpost.Path.joint ->
    ?scale:(float -> Mlpost.Num.t) -> (float * float) list -> Mlpost.Path.t
  val pathn :
    ?style:Mlpost.Path.joint ->
    ?cycle:Mlpost.Path.joint ->
    (Mlpost.Num.t * Mlpost.Num.t) list -> Mlpost.Path.t
  val pathk :
    ?style:Mlpost.Path.joint ->
    ?cycle:Mlpost.Path.joint -> Mlpost.Path.knot list -> Mlpost.Path.t
  val pathp :
    ?style:Mlpost.Path.joint ->
    ?cycle:Mlpost.Path.joint -> Mlpost.Point.t list -> Mlpost.Path.t
  val jointpathk :
    Mlpost.Path.knot list -> Mlpost.Path.joint list -> Mlpost.Path.t
  val jointpathp :
    Mlpost.Point.t list -> Mlpost.Path.joint list -> Mlpost.Path.t
  val jointpathn :
    (Mlpost.Num.t * Mlpost.Num.t) list ->
    Mlpost.Path.joint list -> Mlpost.Path.t
  val jointpath :
    ?scale:(float -> Mlpost.Num.t) ->
    (float * float) list -> Mlpost.Path.joint list -> Mlpost.Path.t
  val cycle :
    ?dir:Mlpost.Path.direction ->
    ?style:Mlpost.Path.joint -> Mlpost.Path.t -> Mlpost.Path.t
  val concat :
    ?style:Mlpost.Path.joint ->
    Mlpost.Path.t -> Mlpost.Path.knot -> Mlpost.Path.t
  val start : Mlpost.Path.knot -> Mlpost.Path.t
  val append :
    ?style:Mlpost.Path.joint ->
    Mlpost.Path.t -> Mlpost.Path.t -> Mlpost.Path.t
  val length : Mlpost.Path.t -> Mlpost.Num.t
  val point : float -> Mlpost.Path.t -> Mlpost.Point.t
  val pointn : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Point.t
  val direction : float -> Mlpost.Path.t -> Mlpost.Point.t
  val directionn : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Point.t
  val subpath : float -> float -> Mlpost.Path.t -> Mlpost.Path.t
  val subpathn :
    Mlpost.Num.t -> Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
  val transform : Mlpost.Transform.t -> Mlpost.Path.t -> Mlpost.Path.t
  val scale : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
  val rotate : float -> Mlpost.Path.t -> Mlpost.Path.t
  val shift : Mlpost.Point.t -> Mlpost.Path.t -> Mlpost.Path.t
  val yscale : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
  val xscale : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
  val cut_after : Mlpost.Path.t -> Mlpost.Path.t -> Mlpost.Path.t
  val cut_before : Mlpost.Path.t -> Mlpost.Path.t -> Mlpost.Path.t
  val strip : Mlpost.Num.t -> Mlpost.Path.t -> Mlpost.Path.t
  val build_cycle : Mlpost.Path.t list -> Mlpost.Path.t
  val defaultjoint : Mlpost.Path.joint
  val fullcircle : Mlpost.Path.t
  val halfcircle : Mlpost.Path.t
  val quartercircle : Mlpost.Path.t
  val unitsquare : Mlpost.Path.t
  type metapath = Mlpost.MetaPath.t
  val of_metapath : Mlpost.Path.metapath -> Mlpost.Path.t
  val to_metapath : Mlpost.Path.t -> Mlpost.Path.metapath
  type orientation =
      Up
    | Down
    | Left
    | Right
    | Upn of Mlpost.Num.t
    | Downn of Mlpost.Num.t
    | Leftn of Mlpost.Num.t
    | Rightn of Mlpost.Num.t
  val smart_path :
    ?style:Mlpost.Path.joint ->
    Mlpost.Path.orientation list ->
    Mlpost.Point.t -> Mlpost.Point.t -> Mlpost.Path.t
  val draw :
    ?color:Mlpost.Color.t ->
    ?pen:Mlpost.Pen.t ->
    ?dashed:Mlpost.Dash.t -> Mlpost.Path.t -> Mlpost.Command.t
end