As a disclaimer: I didnt delve deeply into ReasonReact nor Reason since i’m still looking for a reason (pun intended) to switch from learning elm to learning reason, what intrigues me is the approach that ReasonReact is using when assimilating React into reason:
It is my impression that ReasonReact is trying way too hard to make creating ReasonReact components look like class components using a notation similar to objects or classes by creating a record/object using one of ReasonReact component functions and then spreading them into records/objects that we create.
Why this approach? React is, afaik, pushing to making functional components since they have more room for low level improvements than using class based components. Why cant ReactReason components be simple functions? I can make perfectly working solutions using only functional components in react and only using hooks and class components when trying to improve performance by manipulating the life cycle events.
Since reason primitives are (mostly) immutable a lot of these performance improvements that i did in javascript can be done under the hood by reason (pure functions, immutable data, etc) by pretty much the same way that Elm does. And Elm does use only functions (ignoring the fact that the language doesnt allow OO paradigms unlike reason).
My impression is that ReasonReact is only mapping functionality over to reason and not using reason (or any other ml lang) strengths.
Note: I like reason as a language and i think the similarity to javascript is a big plus in adoption rate, as well as reason’s flexibility in paradigms and even on allowing mutable constructs (to a lesser degree). I dont like ReasonReact though, it seems way too verbose and clunky for a perfectly functional language.