sig   type 'a cli_option = {     switches : string list;     doc : string;     default : 'a;   }   type _ option_spec =       Opt_flag :         bool EDSL.t EDSL.Command_line.cli_option -> bool EDSL.t                                                     EDSL.Command_line.option_spec     | Opt_string :         string EDSL.t EDSL.Command_line.cli_option -> string EDSL.t                                                       EDSL.Command_line.option_spec   and (_, _) cli_options =       Opt_end : string -> ('a, 'a) EDSL.Command_line.cli_options     | Opt_cons : 'EDSL.Command_line.option_spec *         ('a, 'b) EDSL.Command_line.cli_options -> ('-> 'a, 'b)                                                   EDSL.Command_line.cli_options   module Arg :     sig       val string :         ?default:string EDSL.t ->         doc:string ->         string list -> string EDSL.t EDSL.Command_line.option_spec       val flag :         ?default:bool EDSL.t ->         doc:string ->         string list -> bool EDSL.t EDSL.Command_line.option_spec       val ( & ) :         'EDSL.Command_line.option_spec ->         ('b, 'c) EDSL.Command_line.cli_options ->         ('-> 'b, 'c) EDSL.Command_line.cli_options       val usage : string -> ('a, 'a) EDSL.Command_line.cli_options     end   val parse :     ('a, unit EDSL.t) EDSL.Command_line.cli_options ->     (anon:string list EDSL.t -> 'a) -> unit EDSL.t end