packages feed

tal-0.1.0.0: README.md

An implementation of a type-preserving Compiler, derived from the paper

[From System F to Typed Assembly Language](https://www.cs.princeton.edu/~dpw/papers/tal-toplas.pdf)
by Morrisett, Walker, Crary, Glew

I was inspired to implement this paper while preparing a 
[talk](https://www.youtube.com/watch?v=Epbaka9uTQ4) for Papers We Love Philadelphia. 

The implementation includes all passes described in the paper:

* F ==> K   (Typed CPS conversion)
* K ==> C   (Polymorphic closure conversion)
* C ==> H   (Hoisting, reuses the C language)
* H ==> A   (Allocation)
* A ==> TAL (Code generation)

Each language (F, K, C, A, TAL) is defined in the corresponding source
file. These implementations include the abstract syntax, small-step
operational semantics, and type checker for the languages. The file
[Util.hs](src/Util.hs) contains definitions common to all implementations.

The compiler itself is in the file [Translate.hs](src/Translate.hs).  To run
the compiler, load this file into ghci and try out one of the sample programs
from [F.hs](src/F.hs).

In particular, you can try

     Translate*> printM $ compile F.sixfact

to see the TAL output for the factorial function applied to six.

If you would like to compile and then run this function you can try:

     Translate*> test F.sixfact