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 >