Exploring ReasonML
Please support this book: buy it or donate
(Ad, please don’t block.)

2 What is ReasonML?

This chapter gives a brief high-level explanation of Facebook’s new programming language, ReasonML.

2.1 What is ReasonML?

ReasonML is a new object-functional programming language created at Facebook. In essence, it is a new C-like syntax for the programming language OCaml. The new syntax is intended to make interoperation with JavaScript and adoption by JavaScript programmers easier. Additionally, it removes idiosyncrasies of OCaml’s syntax. ReasonML also supports JSX (the syntax for HTML templates inside JavaScript used by Facebook’s React framework). Due to ReasonML being based on OCaml, many people use the two names interchangeably. The following diagram shows how ReasonML fits into the OCaml ecosystem.

This is how ReasonML fits into the OCaml ecosystem.

At the moment, ReasonML’s default compilation target is JavaScript (browsers and Node.js).

This is what ReasonML code looks like:

type color = Red | Green | Blue;

let stringOfColor = (c) =>
  switch (c) {
  | Red => "Red"
  | Green => "Green"
  | Blue => "Blue"
  };

Several things are notable:

2.2 The benefits of OCaml

ReasonML’s foundation, OCaml, brings the following benefits:

2.3 Improving OCaml

The ReasonML team also aims to improve the OCaml ecosystem:

2.4 Conclusion

ReasonML feels much like what you’d get if you cleaned up JavaScript and turned it into a statically typed functional programming language. I’m ambivalent about JSX in ReasonML – it has pros and cons. I’m glad that ReasonML doesn’t reinvent the wheel and is strictly based on the established OCaml.

OCaml’s pragmatism means that you don’t get some of the more fancy functional features (that, e.g., Haskell has), but it also leads to fast compilation, efficient code and decent error messages.