Feldspar/feldspar-compiler — pull request #60 by pjonsson (2013-01-16 14:52:05+00:00)
Title: Add an entity ValueDef for top level constants and let compileProgTop perform the hoisting of the first literals to the top level.

Anders mentioned that it might be possible to relax the hoisting preconditions in syntactic to allow pure computations to float around more freely. This is a stab at implementing the compiler bits of that. I'm not sure about the prettyprinter bits of the patch, but it works for this test case:
```haskell
cexp11 :: Data Bool -> Data WordN
cexp11 b = share (3 :: Data WordN) $ \x -> b ? x $ 0
```
There's definitely room for improvement in the beauty of the matching code in compileProgTop.