sig
  module type Chromosome =
    sig
      type t
      val compare :
        Biocaml_genomeMap.Chromosome.t ->
        Biocaml_genomeMap.Chromosome.t -> int
    end
  module Make :
    functor (Chromosome : Chromosome->
      sig
        type range = Biocaml_range.t
        type location =
            Biocaml_genomeMap.Chromosome.t * Biocaml_genomeMap.Make.range
        module Selection :
          sig
            type t
            val inter :
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.Selection.t
            val union :
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.Selection.t
            val diff :
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.Selection.t
            val size : Biocaml_genomeMap.Make.Selection.t -> int
            val intersects :
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.location -> bool
            val overlap :
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.location -> int
            val to_stream :
              Biocaml_genomeMap.Make.Selection.t ->
              Biocaml_genomeMap.Make.location Stream.t
            val of_stream :
              Biocaml_genomeMap.Make.location Stream.t ->
              Biocaml_genomeMap.Make.Selection.t
          end
        module type Signal =
          sig
            type 'a t
            val eval :
              'Biocaml_genomeMap.Make.Signal.t ->
              default:'-> Biocaml_genomeMap.Chromosome.t -> int -> 'a
            val fold :
              'Biocaml_genomeMap.Make.Signal.t ->
              init:'->
              f:('-> Biocaml_genomeMap.Make.location -> '-> 'c) -> 'c
            val to_stream :
              'Biocaml_genomeMap.Make.Signal.t ->
              (Biocaml_genomeMap.Make.location * 'a) Stream.t
            val of_stream :
              ('-> '-> 'a) ->
              (Biocaml_genomeMap.Make.location * 'a) Stream.t ->
              'Biocaml_genomeMap.Make.Signal.t
          end
        module LSet :
          sig
            type t
            val to_stream :
              Biocaml_genomeMap.Make.LSet.t ->
              Biocaml_genomeMap.Make.location Stream.t
            val of_stream :
              Biocaml_genomeMap.Make.location Stream.t ->
              Biocaml_genomeMap.Make.LSet.t
            val intersects :
              Biocaml_genomeMap.Make.LSet.t ->
              Biocaml_genomeMap.Make.location -> bool
            val closest :
              Biocaml_genomeMap.Make.LSet.t ->
              Biocaml_genomeMap.Make.location ->
              (Biocaml_genomeMap.Make.location * int) option
            val intersecting_elems :
              Biocaml_genomeMap.Make.LSet.t ->
              Biocaml_genomeMap.Make.location ->
              Biocaml_genomeMap.Make.location Stream.t
          end
        module LMap :
          sig
            type 'a t
            val to_stream :
              'Biocaml_genomeMap.Make.LMap.t ->
              (Biocaml_genomeMap.Make.location * 'a) Stream.t
            val of_stream :
              (Biocaml_genomeMap.Make.location * 'a) Stream.t ->
              'Biocaml_genomeMap.Make.LMap.t
            val intersects :
              'Biocaml_genomeMap.Make.LMap.t ->
              Biocaml_genomeMap.Make.location -> bool
            val closest :
              'Biocaml_genomeMap.Make.LMap.t ->
              Biocaml_genomeMap.Make.location ->
              (Biocaml_genomeMap.Make.location * 'a * int) option
            val intersecting_elems :
              'Biocaml_genomeMap.Make.LMap.t ->
              Biocaml_genomeMap.Make.location ->
              (Biocaml_genomeMap.Make.location * 'a) Stream.t
          end
      end
end