inline-js
: Call JavaScript from Haskell, and vice versa!
Documentation
Haddock
Haddock documentation for HEAD is available.
inline-js
as a dependency
Adding cabal
Add a source-repository-package
in the cabal.project
file, see
documentation
for details.
stack
Add an extra-deps
entry in the stack.yaml
file, see
documentation
for details.
nix
Here's an example overlay.
pkgsSelf: pkgsSuper:
let
src = pkgsSelf.fetchFromGitHub {
owner = "tweag";
repo = "inline-js";
rev = "<rev>";
sha256 = pkgsSelf.lib.fakeSha256;
};
in
{
haskellPackages = pkgsSuper.haskellPackages.override {
overrides = self: _: {
inline-js-core = (self.callCabal2nixWithOptions "inline-js-core" src
"--subpath inline-js-core"
{ }).overrideAttrs (_: {
preBuild = ''
substituteInPlace src/Language/JavaScript/Inline/Core/NodePath.hs --replace '"node"' '"${pkgsSelf.nodejs-16_x}/bin/node"'
'';
});
inline-js =
self.callCabal2nixWithOptions "inline-js" src "--subpath inline-js" { };
};
};
}
haskell.nix
See documentation for details.
Implemented features
- Manage
node
sessions which run the eval server script for Haskell/JavaScript interop - Evaluate expressions with
require()
/import()
support - Export Haskell functions to async/sync JavaScript functions
- Load third party libraries in user-specified
node_modules
- Garbage-collected
JSVal
references in Haskell - Support
Promise
-based async evaluation - Type classes for Haskell/JavaScript data marshaling, with
aeson
support - Template Haskell QuasiQuoters for lifting Haskell variables into JavaScript code
- Doesn't require
node
native addon or third party libraries
Planned features
- Integrate with TypeScript compiler, generate Haskell code from TypeScript
.d.ts
code - Integrate with headless browser testing frameworks like
playwright
/puppeteer
for running JavaScript in browsers
Supported versions
Supported GHC versions:
ghc-8.6
, tested withghc-8.6.5
ghc-8.8
, tested withghc-8.8.4
ghc-8.10
, tested withghc-8.10.7
ghc-9.0
, tested withghc-9.0.1
Supported platforms:
- Windows 10 x64, tested with Windows Server 2019
- Linux x64, tested with Ubuntu 20.04
- macOS x64, tested with macOS 10.15
Supported node
versions:
node-v10
, minimumv10.20.0
node-v12
and later
See the CI config for details.
Contributors
inline-js
is maintained by Tweag I/O.
Have questions? Need help? Tweet at @tweagio.