MauScheff / dhc

Compiles Haskell to WebAssembly

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Dfinity Haskell Compiler

Summary

DHC is a Haskell compiler that produces WebAssembly.

It accepts only a tiny subset of the language.

Installation / Dependencies

Run nix build.

Usage / Examples

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!

License

All code and designs are open sourced under GPL V3.

dfinity logo

About

Compiles Haskell to WebAssembly

License:GNU General Public License v3.0


Languages

Language:Haskell 99.4%Language:Nix 0.4%Language:Makefile 0.2%