From Clean
Revision as of 17:10, 16 January 2014 by Dlacko (Talk | contribs)
Jump to: navigation, search

SAPL is a purely functional, intermediate language and related infrastructure for supporting cross-compilation of lazy functional languages to different target platforms. It currently supports Clean and Haskell/GHC as source languages and provides JavaScript as target platform, however a DART and Java target is under development. SAPL is extensively used in the ITasks project, furthermore various GHC based projects are experimenting with SAPL.



SAPL infrastructure consists of a few main parts built around the SAPL Language.

Source filters

Source filters convert the source language to the SAPL language. Currently we have source filters for Clean and Haskell/GHC. For Clean, the filter is integrated into the compiler. As for Haskell/GHC, a separate compiler is provided based on the original one. Detailed instructions for their usages can be found at SAPL/Clean and SAPL/GHC, respectively.

SAPL linker

SAPL has hierarchical module support based on directory layout. Prior to the target compilation a linking step is required to collect and combine, based on arbitrary root expressions, the necessary functions recursively from the separate modules into one SAPL file which will be the input of the target compilers.

As the SAPL language is designed for easy parsing, thus the linking is very fast and straightforward compared to the linking of the target languages (e.g. JavaScript) and helps with minimizing the size of the output code.


A flavour is a kind of configuration file used by the target compilers. It provides information about how to compile the built-in functions of a given source language to a given target language. It must be in sync with source compiler and source language dependent part of the run-time system. Flavours are provided for all the combinations of source and target languages.

Target compilers

A target compiler transforms SAPL code into a given target language. The compilation must be aided by a flavour for the correct compilation of the built-in functions. The SAPL library supports the development of target languages by providing a lexer and parser for the SAPL language along with language transformation functions (e.g. Topological ordering of let definitions), and other support functions (e.g. strictness propagation, type inference etc). Currently JavaScript is supported as only target language, however DART and Java targets are under development.

Target run-time

Run-time functions are necessary to execute the target code. Some of these are independent of the source language and cope with e.g. lazy evaluation, while some are dependent of the source language and must be in sync with the source filter and the supporting flavour. Some language features must be supported by the run-time system, for the current state of/features supported by the run-times please consult with the appropriate page:

Getting started

So far, no official version of the SAPL compiler infrastructure is released. The current development version can be checked out from Build instructions can be found at SAPL/Build



Tutorial (GHC)

Before you engage in following this tutorial, please make sure you successfully installed the SAPL system as it is written at SAPL/Build.



  • January 2 2014: The first draft version of the SAPL wiki is added
Retrieved from ""
Personal tools