This example assumes you've installed OCaml.
Create a new file named
hello.ml, with the following contents:
print_string "Hello world!\n"
ocamlc is the OCaml compiler. To compile and run this script, run
$ ocamlc -o hello hello.ml
and then execute the resulting binary
$ ./hello Hello world!
You can also run this script without compiling it into a binary. You can do so by using
ocaml, the ocaml toplevel system that permits interactive use of OCaml. In your shell, simply run
$ ocaml hello.ml Hello world!
Open a new shell, and type
ocaml to open the toplevel system. Once in the session, you can type the same program:
OCaml version 4.02.1 # print_string "hello world!\n";;
press enter to evaluate the expression, and trigger the print.
hello world! - : unit = ()
Success! We see it printed
hello world!, but what is the
- : unit = () about? OCaml has no statements, everything is an expression that evaluates to some typed value. In this case,
print_string is a function that takes in a
stringas input, and returns a
unit. Think of
unit as a type that can only take one value,
() (also referred to as unit), and represents a finished computation that returns no meaningful value.
In this case,
print_string also has the side-effect of putting characters it received as input onto the screen, which is why we see the first line.
To exit the REPL, press
We have two ways to create an OCaml script. The first use the system toplevel (provided by your package manager like
apt-get) and the second use the toplevel provided by OPAM.
Open your favorite editor, and write:
#!/usr/bin/ocaml print_string "hello worlds!\n";;
After, you can use
chmod +x your_file.ml and you can execute your script with
#!/usr/bin/env ocaml print_string "hello worlds!\n";;
The big difference is about the version of your toplevel. Indeed, if you configured your OPAM with a specific switch (like
opam switch 4.03.0), the script will use OCaml 4.03.0. In the first way, in Debian Sid for example, the script will use OCaml 4.02.3.
You can replace the shebang by
#!/usr/bin/env utop to use
utop instead the vanilla toplevel.
utop is another ocaml toplevel outside the distribution - that means, you need to download and install
utop (the easy way is to use OPAM:
opam install utop).
utop has many features like the historic, the completion and the interactive line editing.
So, if you want an easy way to try some ocaml codes,
utop is the best.
ocaml have no a big difference if you want an ocaml script like above. But the common thing in the OCaml community is to use
In fact, the
ocaml REPL is provided by the ocaml distribution. So, this REPL follows the release cycle of the compiler and if you want some extras features, you need to wait the next release of the compiler.
utop, as we explained, is outside the distribution, so the release cycle is not constraint by the compiler and if you want an extra feature, you will be more likely to try to push this feature inside
ocaml :) !
For this point (and for the historic feature) most people in the ocaml community prefer to use