sig
  type range = Biocaml_range.t
  type 'a location = 'a * range
  module Selection :
    sig
      type 'a t = 'Biocaml_genomeMap.Selection.t
      val inter : 'a t -> 'a t -> 'a t
      val diff : 'a t -> 'a t -> 'a t
      val size : 'a t -> int
      val intersects : 'a location -> 'a t -> bool
      val intersection_size : 'a location -> 'a t -> int
      val enum : 'a t -> 'a location Batteries.Enum.t
      val of_enum : 'a location Batteries.Enum.t -> 'a t
    end
  module type Signal =
    sig
      type ('a, 'b) t
      val make :
        ('a list -> 'b) -> ('c location * 'b) Batteries.Enum.t -> ('c, 'b) t
      val eval : '-> int -> ('a, 'b) t -> 'b
      val fold : ('-> range -> '-> '-> 'c) -> ('a, 'b) t -> '-> 'c
      val enum : ('a, 'b) t -> ('a location * 'b) Batteries.Enum.t
    end
  module type LSet =
    sig
      type 'a t
      val make : 'a location Batteries.Enum.t -> 'a t
      val fold : ('-> range -> '-> 'b) -> 'a t -> '-> 'b
      val intersects : 'a location -> 'a t -> bool
      val enum : 'a t -> 'a location Batteries.Enum.t
      val union : 'a t -> 'a t -> 'a t
      val add : 'a location -> 'a t -> 'a t
    end
  module LMap :
    sig
      type ('a, 'b) t = ('a, 'b) Biocaml_genomeMap.LMap.t
      val enum : ('a, 'b) t -> ('a location * 'b) Batteries.Enum.t
      val of_enum : ('a location * 'b) Batteries.Enum.t -> ('a, 'b) t
      val intersects : 'a location -> ('a, 'b) t -> bool
      val closest : 'a location -> ('a, 'b) t -> 'a location * 'b * int
    end
  module type LMap_spec =
    sig
      type ('a, 'b) t
      val make : ('a location * 'b) Batteries.Enum.t -> ('a, 'b) t
      val fold : ('-> range -> '-> '-> 'c) -> ('a, 'b) t -> '-> 'c
      val pwfold :
        ('-> range -> 'b list -> '-> 'c) -> ('a, 'b) t -> '-> 'c
      val intersects : 'a location -> ('a, 'b) t -> bool
      val enum : ('a, 'b) t -> ('a location * 'b) Batteries.Enum.t
      val union : ('a, 'b) t -> ('a, 'b) t -> ('a, 'b) t
      val add : 'a location -> '-> ('a, 'b) t -> ('a, 'b) t
    end
end