struct

  
  (** The definition of the Embedded DSL *)

  module type Semantics = Biokepi_pipeline_edsl.Semantics.Bioinformatics_base

  
  (** Various compilers to “interpret” the EDSL. *)

  module Compile = struct

    
    (** Compiler to SmartPrint.t displayable pseudo code, see the smart-print library. *)

    module To_display = Biokepi_pipeline_edsl.To_display

    
    (** Compiler to Ketrew workflows using the Biokepi.Tools implementations.

The compiler is itself a functor, see the example:

          let module Workflow_compiler =
            Biokepi.EDSL.Compile.To_workflow.Make(struct
              let processors = 42
              let work_dir = "/work/dir/"
              let machine =
                Biokepi.Setup.Build_machine.create
                  "ssh://example.com/tmp/KT/"
            end)
          in
          let module Ketrew_pipeline_1 = Pipeline_1(Workflow_compilerin
        

*)


    module To_workflow = Biokepi_pipeline_edsl.To_workflow

    
    (** Compiler to JSON (Yojson.Basic.t). *)

    module To_json : Semantics.Bioinformatics_base
      with type 'a repr = var_count: int -> Yojson.Basic.json
       and
       type 'a observation = Yojson.Basic.json =
      Biokepi_pipeline_edsl.To_json

    
    (** Compiler to DOT graph descriptions. *)

    module To_dot : Semantics.Bioinformatics_base
      with 
       type 'a observation = SmartPrint.t =
      Biokepi_pipeline_edsl.To_dot
  end

  
  (** Transformations on the EDSL. *)

  module Transform = struct

    
    (** Apply as much EDSL functions as possible to their arguments (including list_map). *)

    module Apply_functions = Biokepi_pipeline_edsl.Transform_applications.Apply

  end

  
  (** Library of reusable pieces of pipeline. *)

  module Library = Biokepi_pipeline_edsl.Pipeline_library

end