sig
  type matcherDomain = { md_matcher : Ligand.Matcher.matcher; } 
  and matcherState = unit
  and snippetDomain = { sd_snippet : Ligand.Matcher.snippet; } 
  and snippetState = unit
  and ligandBindingDomain = {
    libd_mds : Genome.OldCompiled.matcherDomain list;
    libd_fullmatcher : Ligand.Matcher.matcher;
  } 
  and ligandBindingState = { libds_bound : bool; } 
  and structuralBindingDomain = {
    pubd_sds : Genome.OldCompiled.snippetDomain list;
    pubd_fullsnippet : Ligand.Matcher.snippet;
  } 
  and structuralBindingState = { pubds_bound : bool; } 
  and domain =
      LigandBinding of Genome.OldCompiled.ligandBindingDomain
    | StructuralBinding of Genome.OldCompiled.structuralBindingDomain
    | Matcher of Genome.OldCompiled.matcherDomain
    | Snippet of Genome.OldCompiled.snippetDomain
  and domainstate =
      LigandBindingState of Genome.OldCompiled.ligandBindingState
    | StructuralBindingState of Genome.OldCompiled.structuralBindingState
    | MatcherState of Genome.OldCompiled.matcherState
    | SnippetState of Genome.OldCompiled.snippetState
  and procunit = Genome.OldCompiled.domain array
  and instance = Genome.OldCompiled.domainstate array
  val instantiate_domain :
    Genome.OldCompiled.domain -> Genome.OldCompiled.domainstate
  val make_instance :
    Genome.OldCompiled.domain array -> Genome.OldCompiled.domainstate array
  type compartment_genome = Genome.OldCompiled.procunit list
  and genome = Genome.OldCompiled.compartment_genome list
  val all_domains : '-> 'a
end