There are a few ways of doing this. The newly-added Applicative interface is worth showing off:

let shared_params =
  let open Command.Param in
  return (fun v c rcfile ->
    verb := v;
    color := c;
    rcfile)
    <*> flag "-v" (optional_with_default 0 int) ~doc:"..."
    <*> flag "-c" (...) ~doc:"..."
    <*> ...

shared_params is now a package of arguments that sets the verb and color refs and then gives you the rcfile (it's only that way to mirror your code; I'd usually prefer to just put all three in a record or something). You can use it in Command.basic as follows:

let sum =
  Command.basic
    ~summary:"whatever"
    Command.Spec.(
      empty
      +> shared_params
      +> anon ...)
      (fun rc ... () -> ...)

let main () =
  Command.run begin
    Command.group ~summary:"some stuff"
      [ "sum", sum
      ; "settings", ...
      ]
  end

Let me know if I've omitted too much :)

On 3 August 2015 at 13:18, <leowzukw@vmail.me> wrote:

Hello everybody,

I'm trying to use subcommands with the Core library. I would like to factorize several things :

  • A set of common arguments (to set color, verbosity and so on)
  • A common way to deal with these arguments
  • A pretty way to define subcommands using these common arguments and way to handle it.

 

Main problem is that I can't define more arguments to my subcommand. More details in my code, which is joined. You may also find it here (Github gist, could be updated): http://j.mp/1JHlZ6S

 

Result of the compilation (corebuild cmd.byte)


+ ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -bin-annot -short-paths -thread -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -o cmd.cmo cmd.ml
File "cmd.ml", line 98, characters 5-44:
Warning 48: implicit elimination of optional argument ?extend
File "cmd.ml", line 49, characters 11-341:
Warning 27: unused variable summary.
File "cmd.ml", line 49, characters 20-341:
Warning 27: unused variable args.
Finished, 3 targets (0 cached) in 00:00:03.


Thanks for your help
Leo