functor (Input : Semantics.Bioinformatics_base->
  sig
    module The_pass :
      sig
        module Transformation_types :
          sig
            type 'a from = 'Input.repr
            type 'a term =
              'a
              Apply_optimization_framework(Input).Transformation_types.term =
                Unknown : 'a from -> 'a term
              | Apply : ('-> 'b) term * 'a term -> 'b term
              | Lambda : ('a term -> 'b term) -> ('-> 'b) term
              | List_make : 'a term list -> 'a list term
              | List_map : ('a list term * ('-> 'b) term) -> 'b list term
              | Pair : 'a term * 'b term -> ('a * 'b) term
              | Fst : ('a * 'b) term -> 'a term
              | Snd : ('a * 'b) term -> 'b term
            val fwd : 'a from -> 'a term
            val bwd : 'a term -> 'a from
          end
        module Transformation :
          sig
            type 'a from = 'Transformation_types.from
            type 'a term = 'Transformation_types.term
            val fwd : 'a from -> 'a term
            val bwd : 'a term -> 'a from
            val fmap : ('a from -> 'b from) -> 'a term -> 'b term
            val fmap2 :
              ('a from -> 'b from -> 'c from) ->
              'a term -> 'b term -> 'c term
          end
        module Language_delta :
          sig
            val apply :
              ('-> 'b) Transformation_types.term ->
              'Transformation_types.term -> 'Transformation_types.term
            val lambda :
              ('Transformation_types.term -> 'Transformation_types.term) ->
              ('-> 'b) Transformation_types.term
            val list :
              'Transformation_types.term list ->
              'a list Transformation_types.term
            val list_map :
              'a list Transformation_types.term ->
              f:('-> 'b) Transformation_types.term ->
              'b list Transformation_types.term
            val pair :
              'Transformation_types.term ->
              'Transformation_types.term ->
              ('a * 'b) Transformation_types.term
            val pair_first :
              ('a * 'b) Transformation_types.term ->
              'Transformation_types.term
            val pair_second :
              ('a * 'b) Transformation_types.term ->
              'Transformation_types.term
          end
      end
    type 'a repr = 'The_pass.Transformation.term
    type 'a observation = 'Input.observation
    val observe : (unit -> 'a repr) -> 'a observation
    val to_unit : 'a repr -> unit repr
    val fastq :
      sample_name:string ->
      ?fragment_id:string ->
      r1:string -> ?r2:string -> unit -> [ `Fastq ] repr
    val fastq_gz :
      sample_name:string ->
      ?fragment_id:string ->
      r1:string -> ?r2:string -> unit -> [ `Gz of [ `Fastq ] ] repr
    val bam :
      path:string ->
      ?sorting:[ `Coordinate | `Read_name ] ->
      reference_build:string -> unit -> [ `Bam ] repr
    val gunzip : [ `Gz of 'a ] repr -> 'a repr
    val gunzip_concat : [ `Gz of 'a ] list repr -> 'a repr
    val concat : 'a list repr -> 'a repr
    val merge_bams : [ `Bam ] list repr -> [ `Bam ] repr
    val bam_to_fastq :
      sample_name:string ->
      ?fragment_id:string ->
      [ `PE | `SE ] -> [ `Bam ] repr -> [ `Fastq ] repr
    val bwa_aln :
      ?configuration:Biokepi_bfx_tools.Bwa.Configuration.Aln.t ->
      reference_build:Biokepi_run_environment.Reference_genome.name ->
      [ `Fastq ] repr -> [ `Bam ] repr
    val bwa_mem :
      ?configuration:Biokepi_bfx_tools.Bwa.Configuration.Mem.t ->
      reference_build:Biokepi_run_environment.Reference_genome.name ->
      [ `Fastq ] repr -> [ `Bam ] repr
    val star :
      ?configuration:Biokepi_bfx_tools.Star.Configuration.Align.t ->
      reference_build:Biokepi_run_environment.Reference_genome.name ->
      [ `Fastq ] repr -> [ `Bam ] repr
    val hisat :
      ?configuration:Biokepi_bfx_tools.Hisat.Configuration.t ->
      reference_build:Biokepi_run_environment.Reference_genome.name ->
      [ `Fastq ] repr -> [ `Bam ] repr
    val mosaik :
      reference_build:Biokepi_run_environment.Reference_genome.name ->
      [ `Fastq ] repr -> [ `Bam ] repr
    val stringtie :
      ?configuration:Biokepi_bfx_tools.Stringtie.Configuration.t ->
      [ `Bam ] repr -> [ `Gtf ] repr
    val gatk_indel_realigner :
      ?configuration:Biokepi_bfx_tools.Gatk.Configuration.indel_realigner ->
      [ `Bam ] repr -> [ `Bam ] repr
    val gatk_indel_realigner_joint :
      ?configuration:Biokepi_bfx_tools.Gatk.Configuration.indel_realigner ->
      ([ `Bam ] * [ `Bam ]) repr -> ([ `Bam ] * [ `Bam ]) repr
    val picard_mark_duplicates :
      ?configuration:Biokepi_bfx_tools.Picard.Mark_duplicates_settings.t ->
      [ `Bam ] repr -> [ `Bam ] repr
    val gatk_bqsr :
      ?configuration:Biokepi_bfx_tools.Gatk.Configuration.bqsr ->
      [ `Bam ] repr -> [ `Bam ] repr
    val seq2hla : [ `Fastq ] repr -> [ `Seq2hla_result ] repr
    val optitype :
      [ `DNA | `RNA ] -> [ `Fastq ] repr -> [ `Optitype_result ] repr
    val gatk_haplotype_caller : [ `Bam ] repr -> [ `Vcf ] repr
    val mutect :
      ?configuration:Biokepi_bfx_tools.Mutect.Configuration.t ->
      normal:[ `Bam ] repr -> tumor:[ `Bam ] repr -> unit -> [ `Vcf ] repr
    val mutect2 :
      ?configuration:Biokepi_bfx_tools.Gatk.Configuration.Mutect2.t ->
      normal:[ `Bam ] repr -> tumor:[ `Bam ] repr -> unit -> [ `Vcf ] repr
    val somaticsniper :
      ?configuration:Biokepi_bfx_tools.Somaticsniper.Configuration.t ->
      normal:[ `Bam ] repr -> tumor:[ `Bam ] repr -> unit -> [ `Vcf ] repr
    val varscan_somatic :
      ?adjust_mapq:int ->
      normal:[ `Bam ] repr -> tumor:[ `Bam ] repr -> unit -> [ `Vcf ] repr
    val strelka :
      ?configuration:Biokepi_bfx_tools.Strelka.Configuration.t ->
      normal:[ `Bam ] repr -> tumor:[ `Bam ] repr -> unit -> [ `Vcf ] repr
    val virmid :
      ?configuration:Biokepi_bfx_tools.Virmid.Configuration.t ->
      normal:[ `Bam ] repr -> tumor:[ `Bam ] repr -> unit -> [ `Vcf ] repr
    val muse :
      ?configuration:Biokepi_bfx_tools.Muse.Configuration.t ->
      normal:[ `Bam ] repr -> tumor:[ `Bam ] repr -> unit -> [ `Vcf ] repr
    val apply :
      ('-> 'b) The_pass.Transformation_types.term ->
      'The_pass.Transformation_types.term ->
      'The_pass.Transformation_types.term
    val lambda :
      ('The_pass.Transformation_types.term ->
       'The_pass.Transformation_types.term) ->
      ('-> 'b) The_pass.Transformation_types.term
    val list :
      'The_pass.Transformation_types.term list ->
      'a list The_pass.Transformation_types.term
    val list_map :
      'a list The_pass.Transformation_types.term ->
      f:('-> 'b) The_pass.Transformation_types.term ->
      'b list The_pass.Transformation_types.term
    val pair :
      'The_pass.Transformation_types.term ->
      'The_pass.Transformation_types.term ->
      ('a * 'b) The_pass.Transformation_types.term
    val pair_first :
      ('a * 'b) The_pass.Transformation_types.term ->
      'The_pass.Transformation_types.term
    val pair_second :
      ('a * 'b) The_pass.Transformation_types.term ->
      'The_pass.Transformation_types.term
  end