sig
  type t
  exception Illegal_character
  val create : string -> Ligand.t
  val get_string : Ligand.t -> string
  type interval
  val get_interval_length : Ligand.interval -> int
  exception Overlapping_intervals
  val compare_intervals : Ligand.interval -> Ligand.interval -> int
  type frag
  val get_interval : Ligand.frag -> Ligand.interval
  val contains_end : Ligand.interval -> bool
  val contains_begin : Ligand.interval -> bool
  exception Stale_frag
  val get_whole : Ligand.frag -> Ligand.t
  val get_frag_list : Ligand.t -> Ligand.frag list
  val get_active_interval_list : Ligand.t -> Ligand.interval list
  exception Out_of_bounds
  exception Empty
  val first : Ligand.t -> Ligand.frag
  val last : Ligand.t -> Ligand.frag
  val next_frag : Ligand.frag -> Ligand.frag
  val prev_frag : Ligand.frag -> Ligand.frag
  val iter : (Ligand.frag -> unit) -> Ligand.t -> unit
  module Matcher :
    sig
      type matcher = { stringform : string; compiledform : Str.regexp; } 
      val make : string -> Ligand.Matcher.matcher
      val stringform : Ligand.Matcher.matcher -> string
      val matcher_compare :
        Ligand.Matcher.matcher -> Ligand.Matcher.matcher -> bool
      val allmatches :
        Ligand.Matcher.matcher -> Ligand.t -> Ligand.interval list
      val verify_match_interval :
        Ligand.Matcher.matcher -> Ligand.t -> Ligand.interval -> bool
      val matcher_concat :
        Ligand.Matcher.matcher list -> Ligand.Matcher.matcher
      type string_permuter
      val make_string_permuter :
        Ligand.Matcher.matcher array ->
        (int array * int array) * (int array * int array) ->
        Ligand.Matcher.string_permuter
      val permute_strings :
        Ligand.Matcher.string_permuter -> string * string -> string * string
      type snippet = string * Ligand.Matcher.matcher
      val snipmatch :
        Ligand.Matcher.snippet -> Ligand.Matcher.snippet -> bool
    end
  exception Unable_to_bind
  exception Illegal_interval
  val bind : Ligand.t -> Ligand.interval -> Ligand.frag
  val check : Ligand.t -> Ligand.interval -> bool
  exception Invalid_frag
  val release : Ligand.frag -> unit
  val replace : Ligand.frag -> string -> unit
  type whichside = LeftSplit | RightSplit
  and apportf = Ligand.frag -> Ligand.whichside * Ligand.frag
  val split :
    Ligand.frag ->
    int ->
    (Ligand.t * Ligand.frag) * (Ligand.t * Ligand.frag) * Ligand.apportf
  type joinf = Ligand.whichside * Ligand.frag -> Ligand.frag
  val join :
    Ligand.frag -> Ligand.frag -> (Ligand.t * Ligand.frag) * Ligand.joinf
  val collapse_interval : Ligand.interval -> int * int
  val basic_interval : Ligand.t -> int -> int -> Ligand.interval
  val get_interval_string : Ligand.t -> Ligand.interval -> string
  val get_frag_string : Ligand.frag -> string
end