sugarhaskell: Library-based syntactic extensibility for Haskell

[ code-generation, language, program, source-tools ] [ Propose Tags ]

SugarHaskell is a syntactically extensible variant of Haskell. SugarHaskell organizes language extensions in regular Haskell modules, whose import activates the language extensions at hand. The article "Layout-sensitive Language Extensibility With SugarHaskell" presented at the Haskell Symposium 2012 describes details of SugarHaskell and is available online at

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1
Dependencies base (>=4 && <5), process [details]
License LicenseRef-GPL
Author Sebastian Erdweg
Maintainer seba at informatik uni-marburg de
Category Language, Code generation, Source-tools
Home page
Bug tracker
Source repo head: git clone
Uploaded by SebastianErdweg at 2012-10-05T09:51:31Z
Reverse Dependencies 1 direct, 0 indirect [details]
Executables sugarj, sugarhaskell
Downloads 1341 total (4 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs not available [build log]
Last success reported on 2016-12-23 [all 7 reports]

Readme for sugarhaskell-0.1

[back to package description]

SugarJ Eclipse plugin (recommended)

Visit the SugarJ web site


  1. Install Eclipse (follow instructions on
  2. Start Eclipse.
  3. In Eclipse, select 'Install New Software' in the 'Help' menu.
  4. In the 'work with' field, copy the SugarJ update site and hit enter.
  5. Be sure to deselect the 'Group items by category' checkbox on the bottom of the window.
  6. Select the latest instance of Sugarclipse and click continue. This will install the SugarJ compiler, Spoofax and the Sugarclipse plugin.

In addition, please ensure enough stack space (about 4-16 MB) is available for the SDF parser. You can set the stack space of your Java runtime using the -Xss16m command line argument when starting Eclipse or setting -Xss16m in your eclipse.ini file.

Setting up a SugarJ project

  1. Create a new Java project.
  2. As for now, we need to register the SugarJ builder for this project by hand: Open your project's '.project' file in any text editor and replace the Java build command by the following code: org.sugarj.editor.SugarJBuilder
  3. We're ready to go. Note: SugarJ source files must have the file extension ".sugj".

SugarJ standalone compiler

Installing SugarJ

The SugarJ compiler is almost self-contained and only requires an installation of a Java runtime version 6 or higher. Download and extract it to a location of your choice. The directory structure of the archive is as follows.

  bin/              Scripts to invoke SugarJ
    sugarj          Compiler for *nix
    sugarj.bat      Compiler for Windows
    sugh            Alias of `sugarj -l haskell` for *nix
    sugh.bat        Alias of `sugarj -l haskell` for Windows
    sugj            Alias of `sugarj -l java` for *nix
    sugj.bat        Alias of `sugarj -l java` for Windows
  case-studies/     Sample SugarJ projects
  lib/              The back end         This file

Adding sugarj/bin to the PATH environmental variable of your platform will allow invocation of SugarJ scripts without prefixing them by a location.

Invoking SugarJ

If the current directory is your working directory containing the source files, calling SugarJ is very easy:

bin/sugarj -l java closures/Test.sugj

The -l flag is necessary to specify your host language of choice. Currently, we support Haskell, Java, and Prolog.

If your source files are located in case-studies/closure/src, you can invoke the compiler like this on *nix:

bin/sugarj -l java                       \
  --sourcepath case-studies/closures/src \
  -d           case-studies/closures/bin \
  concretesyntax/Test.sugj               # file(s) to compile relative
                                         # to sourcepath

On Windows:

bin\sugarj -l java                       ^
  --sourcepath case-studies/closures/src ^
  -d           case-studies/closures/bin ^

The generated Test.class may be executed thus:

java -cp case-studies/closures/bin concretesyntax.Test

Compiler options

--atomic-imports         Parse all import statements simultaneously.
--cache <arg>            Specifiy a directory for caching.
--cache-info             Show where files are cached
-cp,--buildpath <arg>    Specify where to find compiled files. Multiple
                           paths can be given separated by ':'.
-d <arg>                 Specify where to place compiled files
--full-command-line      Show all arguments to subprocesses
--gen-files              Generate files?
--help                   Print this synopsis of options
-l,--language <arg>      Specify a language library to activate.
--no-checking            Do not check resulting SDF and Stratego files.
--read-only-cache        Specify the cache to be read-only.
--silent-execution       Try to be silent
--sourcepath <arg>       Specify where to find source files. Multiple
                           paths can be given separated by ':'.
--sub-silent-execution   Do not display output of subprocesses
-v,--verbose             Show verbose output
--write-only-cache       Specify the cache to be write-only.