When comparing Fay vs Idris, the Slant community recommends Idris for most people. In the question“What are the best solutions to "The JavaScript Problem"?” Idris is ranked 6th while Fay is ranked 11th. The most important reason people chose Idris is:
Idris not only has support for type classes, but is a fully dependently typed language, giving you the full power to statically verify your code.
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 Full dependent types
Idris not only has support for type classes, but is a fully dependently typed language, giving you the full power to statically verify your code.
Pro Domain driven design and type driven development
Because of full dependent types in Idris, the programmer can focus more on modelling the domain with types and waste less time fixing common bugs that the type checker will catch. Dependent types help apply type driven development and a lot of code auto generation, making the compiler and type checker an ally in developing working software instead of just getting in the way.
Cons
Con No typeclasses
This can cause some overhead.
Con Not widely used
Con Not widely used
Con Weaker type inference
As type inference is undecidable for dependently-typed languages, Idris cannot offer the full type inference that Haskell supports, and so more type annotations will be needed.
Con Different semantics from Haskell
Idris, while similar to Haskell, has strict semantics, which may cause some confusion if your backend is done in Haskell. If using Idris, it would make sense to do the backend in Idris as well, if not for the fact that Idris currently has fewer libraries available for web development than Haskell.