Thanks Romain, I'll rather use Fabrice's suggestion, which handles command-line argument more simply. Cheers, Philippe. 2014-07-02 14:01 GMT+02:00 Romain Bardou : > You could write a wrapper which start the ocaml process, sends a string > containing something like: > > module Sys = > struct > include Sys > let argv = ... (* fill this *) > end > > to the ocaml process (replace the ... by the arguments given to the > wrapper, using the array syntax, and don't forget that the first cell > must contain the executable path), and then pass the contents of your > script.ml. > > This does not work if your script uses other modules which themselves > use Sys.argv. > > Cheers, > > -- Romain Bardou > > On 02/07/2014 13:48, Philippe Veber wrote: > > Thanks Fabrice, this perfectly explains what I observe. Is this behavior > > considered the right one? Reading from a pipe is regretfully not an > > option for me, as my script has command line arguments. Hence when I > type: > > > > cat script.ml | ocaml --foo --bar 1 > > > > the toplevel complains it knows nothing about the arguments foo and bar. > > A "--" argument would be useful but it seems not available. If it's so, > > I'll file a feature request on Mantis, since without it, there seems to > > be no way to give a script to the toplevel that both takes command line > > arguments and uses a syntax extension. > > > > Thanks again! > > > > > > > > 2014-07-02 10:08 GMT+02:00 Fabrice Le Fessant > > >: > > > > If I remember well, I think "ocaml" has a different behavior > > depending on what it reads from: > > * From a pipe, it parses every sentence and execute each one > > immediatly. > > * From a file, it tries to parse the whole file, and then executes > > everything. > > > > In the second case, it means it will only execute the load of the > > syntax extension after parsing the whole file... which will fail, > > since the syntax extension is needed for that. > > > > --Fabrice > > INRIA & OCamlPro > > > > > > > > On Tue, Jul 1, 2014 at 7:06 PM, Philippe Veber > > > wrote: > > > > Thanks David! > > > > The first call fails with a syntax error on "with sexp": > > > > [pbil:~ 18:58]$cat rien.ml > > > > let () = > > try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") > > with Not_found -> () > > ;; > > > > #use "topfind";; > > #camlp4o;; > > #require " sexplib.syntax";; > > > > open Sexplib.Std;; > > > > type t = int with sexp;; > > > > [pbil:~ 18:58]$ocaml rien.ml > > File "rien.ml ", line 12, characters 13-17: > > Error: Syntax error > > > > It seems like the sexp syntax extension is not loaded when the > > script is evaluated. But it's not really clear to me what going > > wrong... > > > > Cheers! > > ph. > > > > > > > > 2014-07-01 18:51 GMT+02:00 David Sheets > >: > > > > On Tue, Jul 1, 2014 at 5:38 PM, Philippe Veber > > > > > wrote: > > > Reposting this question here, just in case. > > > > > > ---------- Forwarded message ---------- > > > From: Philippe Veber > > > > > Date: 2014-06-28 21:32 GMT+02:00 > > > Subject: Toplevel and syntax extension. > > > To: ocaml_beginners@yahoogroups.com > > > > > > > > > > > Dear camlers, > > > > > > Consider the following script: > > > > > > #use "topfind";; > > > #camlp4o;; > > > #require "sexplib.syntax";; > > > > > > open Sexplib.Std;; > > > > > > type t = int with sexp;; > > > > > > Saved as script.ml , the simple call: > > > > > > ocaml script.ml > > > > > > fails while the call: > > > > > > cat script.ml | ocaml > > > > > > succeeds. Any idea how I could fix the first call? > > > > How does the first call fail? A difference between the two > > is that, in > > the second, the .ocamlinit file is used. If you are using > > opam with > > ocamlfind installed via it, this file will contain your > > Topdirs setup. > > You can try: > > > > let () = > > try Topdirs.dir_directory (Sys.getenv > "OCAML_TOPLEVEL_PATH") > > with Not_found -> () > > ;; > > > > at the top of your script (after hashbang but before > > directives). > > > > Hope this helps, > > > > David > > > > > > > > > > > > -- > > Fabrice LE FESSANT > > Chercheur en Informatique > > INRIA Paris Rocquencourt -- OCamlPro > > Programming Languages and Distributed Systems > > > > > >