You might want to split your file in two different files, a loader and the body: peerocaml:~% cat > script_body.ml open Sexplib.Std;; type t = int with sexp;; peerocaml:~% cat > script.ml #use "topfind";; #camlp4o;; #require "sexplib.syntax";; #use "script_body.ml" peerocaml:~% ocaml script.ml --Fabrice INRIA & OCamlPro On Wed, Jul 2, 2014 at 1:48 PM, 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 >> > > -- Fabrice LE FESSANT Chercheur en Informatique INRIA Paris Rocquencourt -- OCamlPro Programming Languages and Distributed Systems