sig
  type logicalInput =
      BindIndicator of Genome.Compact.bindingDomain
    | LogicalOuput of Genome.Compact.logicalIntegrationDomain
  and logicalIntegrationDomain =
      ORDomain of Genome.Compact.logicalInput list
    | ANDDomain of Genome.Compact.logicalInput list
    | NOTDomain of Genome.Compact.logicalInput
    | FALSE
    | TRUE
    | SIMPLEINPUT of Genome.Compact.logicalInput
  and matcherDomain = Ligand.Matcher.matcher
  and snippetDomain = Ligand.Matcher.snippet
  and ligandBindingDomain = Genome.Compact.matcherDomain list
  and structuralBindingDomain = Genome.Compact.snippetDomain list
  and bindingDomain =
      StructuralBindingDomain of Genome.Compact.structuralBindingDomain
    | LigandBindingDomain of Genome.Compact.ligandBindingDomain
  and expressionDomainAtom =
      StaticString of string
    | MatchedString of Genome.Compact.bindingDomain
  and expressionDomain = Genome.Compact.expressionDomainAtom list
  and remappingHeart = {
    trigger : Genome.Compact.logicalIntegrationDomain;
    rule : int;
  } 
  and heartDomain = RemappingHeart of Genome.Compact.remappingHeart
  and domain =
      BindingDomain of Genome.Compact.bindingDomain
    | MatcherDomain of Genome.Compact.matcherDomain
    | SnippetDomain of Genome.Compact.snippetDomain
    | ExpressionDomain of Genome.Compact.expressionDomain
    | Heart of Genome.Compact.heartDomain
  and procunit = Genome.Compact.domain list
  and compartment_genome = Genome.Compact.procunit list
  and genome = Genome.Compact.compartment_genome list
end