Toplevel
The first look at the toplevel is disheartening.
# let f = fun x : x + 1^[[D^[[D^[[D
The toplevel does not support readline functionality out of the box. This leads to considerable frustration (note that I accidentally wrote a ':' instead of '->' and I tried pressing the left-arrow to try to fix it.
However, there exists ledit which can be used to give the REPL some sensible behavior, albeit nothing like iPython's auto-completion.
$ aptitude install ledit $ ledit ocaml
There are other readline wrappers around too which can provide similar functionality (rlwrap, etc.)
Working with external libraries
Ocaml handles libraries in a very very low-level fashion, and getting things to work correctly from the top-level can be particularly painful. Here are a few tips which may help if you are working with external libraries. Your mileage might vary.
Godi Ocaml
Use Godi's distribution of Ocaml instead of the Debian/Ubuntu packages:
$ aptitude install ocaml # Not a very good idea
After Godi's installation, it'll take a little effort to set up the path/soft-links to execute the scripts initially, but after that hurdle, the rest is a very smooth ride.
Godi's installation provides some excellent ocaml packages out-of-the-box and does not require root privileges. Also, one of the clinchers is:
$ godi_console
for easy installation of many commonly used packages.
However, getting these packages loaded into the top-level just to play with could be a pain, but there is a remedy.
Topfind
Use topfind to load modules in the top-level and handle dependencies.
# #use "topfind";; - : unit = () Findlib has been successfully loaded. Additional directives: #require "package";; to load a package #list;; to list the available packages #camlp4o;; to load camlp4 (standard syntax) #camlp4r;; to load camlp4 (revised syntax) #predicates "p,q,...";; to set these predicates Topfind.reset();; to force that packages will be reloaded #thread;; to enable threads - : unit = () # #require "ZMQ";; /home/utkarsh/godi/lib/ocaml/site-lib/uint: added to search path /home/utkarsh/godi/lib/ocaml/site-lib/uint/uint64.cma: loaded /home/utkarsh/godi/lib/ocaml/site-lib/ZMQ: added to search path /home/utkarsh/godi/lib/ocaml/site-lib/ZMQ/ZMQB.cma: loaded #
$ ocamlmktop -o my_top_level my_module.cmo your_module.cmo our_module.cmo
Ocamlbrowser
This is available with the godi-ocaml-labltk package which can be installed using godi_console.
This is an near absolute necessity while working with most Ocaml modules, even if they are very well documented. It certainly beats going through the .mli files of the packages.
I still have to try out the Eclipse's Ocaml IDE to see whether it can replace ocamlbrowser with intellisense.