sig
  module type Equatable =
    sig
      type t
      val equal :
        Bitpath_cover_map.Equatable.t ->
        Bitpath_cover_map.Equatable.t -> bool
    end
  module Poly :
    sig
      type prefix = Bitpath.t
      type 'a t
      val empty : 'Bitpath_cover_map.Poly.t
      val is_empty : 'Bitpath_cover_map.Poly.t -> bool
      val const : '-> 'Bitpath_cover_map.Poly.t
      val is_const : 'Bitpath_cover_map.Poly.t -> bool
      val to_const : 'Bitpath_cover_map.Poly.t -> 'a
      val picki_first :
        'Bitpath_cover_map.Poly.t -> Bitpath_cover_map.Poly.prefix * 'a
      val picki_random :
        'Bitpath_cover_map.Poly.t -> Bitpath_cover_map.Poly.prefix * 'a
      val lower_half :
        'Bitpath_cover_map.Poly.t -> 'Bitpath_cover_map.Poly.t
      val upper_half :
        'Bitpath_cover_map.Poly.t -> 'Bitpath_cover_map.Poly.t
      val unzoom :
        Bitpath_cover_map.Poly.prefix ->
        'Bitpath_cover_map.Poly.t -> 'Bitpath_cover_map.Poly.t
      val zoom :
        Bitpath_cover_map.Poly.prefix ->
        'Bitpath_cover_map.Poly.t -> 'Bitpath_cover_map.Poly.t
      val cover_find :
        Bitpath_cover_map.Poly.prefix ->
        'Bitpath_cover_map.Poly.t -> Bitpath_cover_map.Poly.prefix
      val remove :
        Bitpath_cover_map.Poly.prefix ->
        'Bitpath_cover_map.Poly.t -> 'Bitpath_cover_map.Poly.t
      val intersect :
        Bitpath_cover_map.Poly.prefix ->
        'Bitpath_cover_map.Poly.t -> 'Bitpath_cover_map.Poly.t
      val cover_card : 'Bitpath_cover_map.Poly.t -> int
      val fold : ('-> '-> 'b) -> 'Bitpath_cover_map.Poly.t -> '-> 'b
      val foldi :
        (Bitpath_cover_map.Poly.prefix -> '-> '-> 'b) ->
        'Bitpath_cover_map.Poly.t -> '-> 'b
      val iter : ('-> unit) -> 'Bitpath_cover_map.Poly.t -> unit
      val iteri :
        (Bitpath_cover_map.Poly.prefix -> '-> unit) ->
        'Bitpath_cover_map.Poly.t -> unit
    end
  module Make :
    functor (C : Equatable->
      sig
        type prefix = Bitpath.t
        type codomain = C.t
        type t = Bitpath_cover_map.Make.codomain Bitpath_cover_map.Poly.t
        val equal :
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t -> bool
        val disjoint :
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t -> bool
        val empty : Bitpath_cover_map.Make.t
        val is_empty : Bitpath_cover_map.Make.t -> bool
        val const :
          Bitpath_cover_map.Make.codomain -> Bitpath_cover_map.Make.t
        val is_const : Bitpath_cover_map.Make.t -> bool
        val to_const :
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.codomain
        val picki_first :
          Bitpath_cover_map.Make.t ->
          Bitpath_cover_map.Make.prefix * Bitpath_cover_map.Make.codomain
        val picki_random :
          Bitpath_cover_map.Make.t ->
          Bitpath_cover_map.Make.prefix * Bitpath_cover_map.Make.codomain
        val appose :
          Bitpath_cover_map.Make.t ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val lower_half : Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val upper_half : Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val unzoom :
          Bitpath_cover_map.Make.prefix ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val zoom :
          Bitpath_cover_map.Make.prefix ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val cover_find :
          Bitpath_cover_map.Make.prefix ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.prefix
        val add :
          Bitpath_cover_map.Make.prefix ->
          Bitpath_cover_map.Make.codomain ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val remove :
          Bitpath_cover_map.Make.prefix ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val intersect :
          Bitpath_cover_map.Make.prefix ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val modify :
          Bitpath_cover_map.Make.prefix ->
          (Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t) ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val cover_card : Bitpath_cover_map.Make.t -> int
        val fold :
          (Bitpath_cover_map.Make.codomain -> '-> 'a) ->
          Bitpath_cover_map.Make.t -> '-> 'a
        val foldi :
          (Bitpath_cover_map.Make.prefix ->
           Bitpath_cover_map.Make.codomain -> '-> 'a) ->
          Bitpath_cover_map.Make.t -> '-> 'a
        val iter :
          (Bitpath_cover_map.Make.codomain -> unit) ->
          Bitpath_cover_map.Make.t -> unit
        val iteri :
          (Bitpath_cover_map.Make.prefix ->
           Bitpath_cover_map.Make.codomain -> unit) ->
          Bitpath_cover_map.Make.t -> unit
        val map :
          ('-> Bitpath_cover_map.Make.codomain) ->
          'Bitpath_cover_map.Poly.t -> Bitpath_cover_map.Make.t
        val mapi :
          (Bitpath_cover_map.Make.prefix ->
           '-> Bitpath_cover_map.Make.codomain) ->
          'Bitpath_cover_map.Poly.t -> Bitpath_cover_map.Make.t
        val right_isecn :
          Bitpath_cover_map.Make.t ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val right_union :
          Bitpath_cover_map.Make.t ->
          Bitpath_cover_map.Make.t -> Bitpath_cover_map.Make.t
        val valid : Bitpath_cover_map.Make.t -> bool
      end
end