When comparing Fay vs Reason ML, the Slant community recommends Reason ML for most people. In the question“What are the best solutions to "The JavaScript Problem"?” Reason ML is ranked 7th while Fay is ranked 11th.
Specs
Ranked in these QuestionsQuestion Ranking
Pros
Pro Small output
Fay produces smaller output than pure Haskell compilers such as GHCJS; It does not need to include the whole Haskell runtime, as it drops support for features such as multi-threading, giving it fewer dependencies.
Pro Simple, flexible, hackable FFI
As with UHC, the FFI to Javascript works with printf-style format:
max = ffi "Math.round(%1,%2)"
This can simplify code needed to make calls to methods on objects, in contrast to e.g., Purescript's FFI, which requires that methods be wrapped in Javascript. Similarly to UHC, Fay also supports the use of %*
, for javascript functions with arbitrary numbers of parameters, such as concat
, though they must expose an explicit number of parameters to Fay.
Pro Easy to set up, with packages available on Cabal
Fay is available on Cabal, as are Fay packages, so getting up and running is as simple as typing 'cabal install'. Happstack, Snap, and Yesod packages are available on Hackage, as are bindings for JQuery and Backbone.
Pro Subset of Haskell - nothing new to learn
Since Fay is a subset of Haskell - Lazy, statically typed, and pure by default. There's no new syntax to learn, and no surprises when it comes to the semantics of your code. This extends into function names as well - Fay programmers can use familiar functions such as putStrLn
to output to the console, rather than Javascript-specific versions.
Pro Uses the excellent Bucklescript Ocaml to Javascript transpiler
Pro Superior type inference
Ocaml type inference is so smart that you never have to repeat yourself and keep code very clean, type errors also are very pleasant.
Pro Aims to make the transition from Javascript easier
Despite being a completely different language Javascript programmer will find that the syntax of ReasonML has many familiarities with Javascript.
Pro Uses established compiler technology from Ocaml with a tweaked syntax that leans more towards Javascript
Pro Removes JavaScript "bad parts" but sticks to it's design philosophy
unlike other js-targetting languages that are thought as a way to have a language that pleases community X run in a browser, reason is really designed with JavaScript community in mind. it removes the bad parts but keeps its syntax and its best design principles (from Scheme): simplicity, minimalism, and functions as building block.
Pro Immutability with escape hatches
reason includes true immutability, but it has escape hatches to let you use mutations in exceptional cases.
Pro Compiles to JavaScript or assembly (ocaml)
The same reasonml code can compile to js (eg. run on browsers or node.js, use any lib in npm), or compile to assembly thru ocaml (unless of course you load js externals), running on any device, with C-comparable (or better) performance.
Pro JSX syntax natively supported
Reason was created by the creator of react, for developers already using JSX to template web or native UIs this results very familiar.
Cons
Con No typeclasses
This can cause some overhead.
Con A standard async syntax is pending
Async syntax is not standard across native/js projects and in both cases a bit awkward for non-ocaml devs. Currently this is reasonml most voted issue in their GitHub repo so hopefully, there's news soon.
Con Ecosystem is a mess
A wonderful language, but a user is required to use multiple different package managers for many things (esy, bsb, npm). Some standard templates from bsb (e.g. react-starter) are not installable out of the box.
