sig
  module type CCC =
    sig
      type point
      val ccw :
        Delaunay.CCC.point ->
        Delaunay.CCC.point -> Delaunay.CCC.point -> bool
      val in_circle :
        Delaunay.CCC.point ->
        Delaunay.CCC.point ->
        Delaunay.CCC.point -> Delaunay.CCC.point -> bool
    end
  module type Triangulation =
    sig
      module S : CCC
      type triangulation
      val triangulate : S.point array -> Delaunay.Triangulation.triangulation
      val iter :
        (S.point -> S.point -> unit) ->
        Delaunay.Triangulation.triangulation -> unit
      val fold :
        (S.point -> S.point -> '-> 'a) ->
        Delaunay.Triangulation.triangulation -> '-> 'a
      val iter_triangles :
        (S.point -> S.point -> S.point -> unit) ->
        Delaunay.Triangulation.triangulation -> unit
    end
  module Make :
    functor (S : CCC->
      sig
        module S :
          sig
            type point = S.point
            val ccw : point -> point -> point -> bool
            val in_circle : point -> point -> point -> point -> bool
          end
        type triangulation
        val triangulate : S.point array -> triangulation
        val iter : (S.point -> S.point -> unit) -> triangulation -> unit
        val fold :
          (S.point -> S.point -> '-> 'a) -> triangulation -> '-> 'a
        val iter_triangles :
          (S.point -> S.point -> S.point -> unit) -> triangulation -> unit
      end
  module IntPoints :
    sig
      type point = int * int
      val ccw : point -> point -> point -> bool
      val in_circle : point -> point -> point -> point -> bool
    end
  module Int :
    sig
      module S :
        sig
          type point = int * int
          val ccw : point -> point -> point -> bool
          val in_circle : point -> point -> point -> point -> bool
        end
      type triangulation
      val triangulate : S.point array -> triangulation
      val iter : (S.point -> S.point -> unit) -> triangulation -> unit
      val fold :
        (S.point -> S.point -> '-> 'a) -> triangulation -> '-> 'a
      val iter_triangles :
        (S.point -> S.point -> S.point -> unit) -> triangulation -> unit
    end
  module FloatPoints :
    sig
      type point = float * float
      val ccw : point -> point -> point -> bool
      val in_circle : point -> point -> point -> point -> bool
    end
  module Float :
    sig
      module S :
        sig
          type point = float * float
          val ccw : point -> point -> point -> bool
          val in_circle : point -> point -> point -> point -> bool
        end
      type triangulation
      val triangulate : S.point array -> triangulation
      val iter : (S.point -> S.point -> unit) -> triangulation -> unit
      val fold :
        (S.point -> S.point -> '-> 'a) -> triangulation -> '-> 'a
      val iter_triangles :
        (S.point -> S.point -> S.point -> unit) -> triangulation -> unit
    end
end