Skip to content

csabahruska/jhc-components

Repository files navigation

JHC Haskell Compiler

This is a fork of JHC Haskell Compiler 0.8.2.

The source code is split into reusable components and builds with Haskell Stack.

Components

  • jhc-compat: Haskell98 compatibility library
  • jhc-common: Compiler foundation library
  • jhc-frontend: Haskell Front-End, lexer, parser, type-checker
  • jhc-core: Core language, based on Pure Type System
  • jhc-grin: Backend, C code generator, whole program optimizer, variant of GRIN intermediate language
  • jhc-app: JHC Compiler, command line interface

NOTE: lib contains the standard Haskell libraries for JHC

System Requirements

Compile & Run

Stack

The instructions below are for Haskell Stack.

stack setup
stack build
stack exec -- jhc --help

To compile the standard libraries run:

stack exec -- jhc -L . --build-hl  lib/jhc-prim/jhc-prim.yaml
stack exec -- jhc -L . --build-hl  lib/jhc/jhc.yaml
stack exec -- jhc -L . --build-hl  lib/haskell-extras/haskell-extras.yaml
stack exec -- jhc -L . --build-hl  lib/haskell2010/haskell2010.yaml
stack exec -- jhc -L . --build-hl  lib/haskell98/haskell98.yaml
stack exec -- jhc -L . --build-hl  lib/applicative/applicative.yaml
stack exec -- jhc -L . --build-hl  lib/flat-foreign/flat-foreign.yaml

To compile the examples run:

stack exec -- jhc -L . examples/Calendar.hs -o calendar
stack exec -- jhc -L . examples/HelloWorld.hs -o hello
stack exec -- jhc -L . examples/Primes.hs -o primes

Cabal

The instructions below are for Haskell Cabal version 2.4.1 or later.

To (re)compile and run jhc from within the source-tree, simply invoke

cabal v2-run jhc -- --help

To compile the standard libraries run:

cabal v2-run jhc -- -L . --build-hl  lib/jhc-prim/jhc-prim.yaml
cabal v2-run jhc -- -L . --build-hl  lib/jhc/jhc.yaml
cabal v2-run jhc -- -L . --build-hl  lib/haskell-extras/haskell-extras.yaml
cabal v2-run jhc -- -L . --build-hl  lib/haskell2010/haskell2010.yaml
cabal v2-run jhc -- -L . --build-hl  lib/haskell98/haskell98.yaml
cabal v2-run jhc -- -L . --build-hl  lib/applicative/applicative.yaml
cabal v2-run jhc -- -L . --build-hl  lib/flat-foreign/flat-foreign.yaml

To compile the examples run:

cabal v2-run jhc -- -L . examples/Calendar.hs -o calendar
cabal v2-run jhc -- -L . examples/HelloWorld.hs -o hello
cabal v2-run jhc -- -L . examples/Primes.hs -o primes

Development Ideas

Check the list of development ideas.