Getting Started with OCaml and Reason
Recently I've been exploring OCaml, an interesting statically typed functional language that's been around since 1996. I've tried OCaml in the past and always got frustrated by the tools and just gave up. This time round, there seems to have been an effort to improve the developer experience and it shows. The tools are much easier to use, and mostly just work.
In this post, we will go through setting up an OCaml development environment on a Mac. I will also share a starter project, some of the essential packages you will need.
Installing Ocaml
On a Mac, you should be able to install ocaml
with homebrew:
brew install ocaml
Real World OCaml has the best installation guide I have found so far, so follow that and you should be good.
At the end of that guide, you should have ocaml
and opam
installed:
❯ ocaml --version
The OCaml toplevel, version 4.12.0
❯ opam --version
2.1.0
Opam is the default package management tool in Ocaml ecosystem.
In addition to following that guide, install dune, the ocaml build tool. We will need it later.
opam install dune
Isolated Development Environments per project with opam
Opam can create isolated OCaml environments per project. Think of this as virtualenv, but for OCaml. By default, when starting a new project, I run the following command in the project folder to create a brand new OCaml environment:
opam switch create . ocaml-base-compiler.4.12.0
This will create an isolated OCaml environment and with OCaml version 4.12.0 installed.
To activate the newly created environment in the current shell, run the following command:
eval $(opam env)
To automate this process, I use direnv to activate the isolated OCaml environment in my shell every time I navigate to the folder. This is done through adding the command above to a .envrc
file in the project folder.
Editor setup: VS-Code
For OCaml development on Visual Studio Code, the essential package you need is VSCode OCaml Platform
To make full use of the extension, I've found that I've needed to install the ocamlformat
and ocaml-lsp-server
packages individually in each of the specific project I'm developing.
Starter Project Template - dune package manager
To ease the process of getting started on a new project, please take a look at this project template that I use whenever I need to start a new project.
Reason Support
In the starter project template, you should find a Reason file in the lib/
directory.
Dune supports Reason files by default, so you don't need to do anything extra to write your code in the Reason variant. You can also mix and match Reason and Ocaml files in the project and it should work just fine.
I've found that to enable formatting Reason files in Visual Studio Code, I also have to install the refmt
opam package locally in the project-specific environment.
That's all for now.
Enjoy the rest of your day!