DEV Community

Alain
Alain

Posted on

Dune in Luv, ReasonML and Dune

I am trying to use the aantron/luv library to try to build something and I ran into all kinds of build system issues mostly because I still haven't grokked the reason-native build system yet. That's ok. This note is my way of getting better and having a reference I understand when I need to come back to it. The reason-native build environment has a list of great tools you can use. Most prominent among them are Dune, Esy/Pesy and Spin. The last two use dune so you end up learning about dune whatever you do.

Let's start with dune. Assuming you have opam and dune installed this is easy. Go here if you don't then head back.

Make a directory and cd into it.

mkdir straight-dune-luv && cd straight-dune-luv

Add a .gitignore file for ocaml using the gitignore-cli.

gi ocaml > .gitignore

Create a switch with ocaml 4.08.1. luv requires at least that.

opam switch create . ocaml-base-compiler.4.08.1

Add reason and luv. dune will tell you nicely if you forget to do this.

opam install reason luv

Create you dune file and run install.

touch dune && dune install

Create a Makefile, optional. I just copied the one from a previous post here.

touch Makefile

Which didn't work because of the tabs being off from the paste. Ran cat -e -t -v Makefile which I found on stackoverflow.

Add the code from aantron/luv/example/progress.ml.

touch progress.ml

Convert it to .re and delete the .ml version.

bsrefmt --parse ml progress.ml --print re > progress.re
rm progress.ml

Run make to build it.

make

Run progress.exe.

dune exec ./progress.exe

Output:

❯ dune exec ./progress.exe
33%                  
66%
Done

Honestly, that was very easy. This has to be your go to build for a simple project. Source can be found here

Let's try with Pesy next.

Top comments (4)

Collapse
 
austindd profile image
Austin

That's super cool, Michael! I love the JSX-like syntax for the string formatting. Btw, one of the images in the post is not rendering. It looks like it's not hosted right now, for whatever reason. But overall that's a great intro to building CLI apps. :)

Collapse
 
austindd profile image
Austin

Nice! I've been meaning to dive into native ReasonML soon, so it's nice to see some simple, straightforward tutorials on stuff like build tools.

Collapse
 
idkjs profile image
Alain

There is no ReasonML without OCaml, brother. That is the truth of it for me so I have to make these notes to figure out/remember how to do some thing. OCaml ecosystem is deep. I haven't even touched oasis ocamlbuild etc. Once you get a little bit of a hold on it though, you get how powerful it is and you want more! Have at it. Share what you learn, please.

 
idkjs profile image
Alain

@austin what image is not rendering, brother?