4

In ocaml toplevel, I can use "bitstring" package by typing the following commands:

#use "topfind";;
#camlp4o;;
#require "bitstring.syntax";;

let data = 0l;;
let bits = BITSTRING { data : 32 };;

However, if I create an OCaml script, e.g., foo.ml :

#!/usr/bin/env ocaml
#use "topfind";;
#camlp4o;;
#require "bitstring.syntax";;

let data = 0l;;
let bits = BITSTRING { data : 32 };;

And, if I run the OCaml script, I got a syntax error:

$ ./foo.ml
File "./foo.ml", line 8, characters 28-29: Error: Syntax error

What am I missing here? Why does the same code work with an interactive shell, but not with a script file?

tshepang
  • 12,111
  • 21
  • 91
  • 136

1 Answers1

4

I believe that's because script file is first parsed, and then the directives are executed, hence it cannot handle unknown (yet) syntax.

The easiest solution is to use ocamlscript :

#! /usr/bin/env ocamlscript
Ocaml.packs := [ "bitstring"; "bitstring.syntax" ]
--

let data = 0l;;
let bits = BITSTRING { data : 32 };;
ygrek
  • 6,656
  • 22
  • 29