DEV Community

Alain
Alain

Posted on

6 1

Hello World with OCaml and ReasonML

A note to self on using OCaml with the ReasonML syntax without Bucklescript.

Setup

  1. Install opam
  2. Install reason language options with opam install reason

HelloWorld

Create a hello.re file:

// hello.re
print_string("Hello world!\n");

Compile hello.re by running ocamlc -o hello -pp "refmt -p ml" -impl hello.re.

Open your terminal and run ./hello.

Your output is:

➜  helloworld ocamlc -o hello -pp "refmt -p ml" -impl hello.re
➜  helloworld ./hello
Hello world!

Sources

https://riptutorial.com/ocaml/example/7096/hello-world

repo

Notes from Discord Channel:

@idkjs the ocaml toolchain read only ocaml syntax, binary ast (which is shared between reason/ocaml). Hopefully the reason package come with a tool that is able to translate both syntax refmt.
the -p option of refmt is print. So refmt -p ml hello.re > hello.re.ml take the reason syntax in the re file and output in the hello.re.ml file. I use -p ml for debugging but -p binary is used by dune because it is quicker. Then you can use OCaml binary ocamlc -o my_target hello.re.ml (the -o is for ouput default name is machine dependant). because file end with .ml the compiler know it must build .cmo/.exe, if passed a .mli it will build .cmi, etc. The problem with .re file is it is not .ml nor .mli so we need to say it will be a implementation -impl or a interface -intf. and finally -pp is run this command on this file to have a valid ocaml file (here we use refmt because it output valid OCaml)

-impl <file>  Compile <file> as a .ml file
-intf <file>  Compile <file> as a .mli file
-intf-suffix <string>  Suffix for interface files (default: .mli)
-pp <command>  Pipe sources through preprocessor <command>

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (2)

 
idkjs profile image
Alain • Edited

If you had asked me before yesterday, I would not have been aware of it. Thank you for making the point, brother.

Incidentally, can you recommend some F# sharp starting material? I need to get my feet wet there.

Collapse
 
idkjs profile image
Alain

All about esy brother. Those dudes are ocaml/npm alchemists. The issue was trying to understand how to do it without esy. If you want to see it with esy check out github.com/idkjs/esy-nantes-tutorial. It does the same exact thing using esy. The readme tells you how to do it.

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more