GHCJS is a Haskell-to-JavaScript compiler that reuses GHC’s front end to compile Haskell source into JavaScript for execution in browsers and Node.js. It aims to preserve Haskell’s semantics—including laziness and rich types—by shipping a small runtime and shims for core libraries. Developers write normal Haskell, use Cabal/Stack to build, then bundle the generated JavaScript alongside required support code. Interoperability with the JavaScript world is provided through a foreign-function interface, allowing Haskell code to call browser APIs or Node modules and to be called back from JS. The ecosystem includes packages tailored to GHCJS (for example DOM bindings and FRP libraries), enabling full single-page apps written in Haskell. Because it mirrors GHC closely, many pure Haskell libraries “just work,” making it practical to share code between server and client.
Features
- Compilation from Haskell (GHC) to JavaScript
- Support for standard Haskell libraries and code, with JS backend
- Interoperability with JavaScript (FFI, calling JS from Haskell)
- Runtime support (garbage collection, threading abstraction)
- Integration with GHC build system and toolchain
- Ability to run rich UI/web logic or browser applications written in Haskell