DHC is a Haskell compiler that produces WebAssembly.
It accepts only a tiny subset of the language.
The dhc
program takes Haskell source on standard input and compiles it to
WebAssembly on standard output. Two IO functions are defined:
putStr :: String -> IO () putInt :: Int -> IO () -- `Int` means 64-bit integer.
which respectively call WebAssembly imports:
system.putStr (ptr : i32, len : i32) system.putInt (lo : i32, hi : i32)
In system.putInt
, we split the integer into 32-bit halves to make life easier
for JavaScript.
The rundhc
tool can interpret the output of dhc
. It expects the input
WebAssembly binary to export a function named main
, that takes no arguments
and returns no arguments.
For example:
$ echo 'public(main) main=putStr"Hello, World!\n"' | ./dhc | ./rundhc Hello, World!