hs2bf compiles Haskell to Brainfuck, not the other way around.
Although it's far from Haskell98, it has lots of Haskell's distinctive features such as ADTs and lazy evaluation.
- Algebraic data type
- Pattern matching
- Case expression
- Lambda expression
- Function declaration
- Infix operators
- Lazy semantics
- Numeric type
Byteand some primitive ops - ...
Basically, hs2bf has everything that make code look Haskell-ish.
- Copy Garbage Collection
- 1 byte address for heap "nodes"
Although number of heap nodes is very limited, it's not fundamental limit and is fairly straightforward (although time-consuming) work to extend it to any number of nodes.
The main hurdle is slow execution speed (and long turn around time when debugging).
- IO monad (instead, hs2bf has a built-in type
Eto express all possible IO in CPS style) - Type inference & polymorphism (see note below)
- class / instance definition
- Proper module system
- Most of Prelude
Lacking explicit support for polymorphism doesn't mean you can't use polymorphic functions. For example, map :: (a -> b) -> [a] -> [b] works erfectly fine for any a or b in hs2bf. It merely can't prove the correctness of the types when compiling. (You know, a type system is a contraint on pure lambda.)
But lack of class/instance does mean you can't do things like show :: Show a => a -> String or forall.
Run ./conv followed by ./auto-test (you'll need fish shell for both).
If it's ok, the result will look like below (the runtime may differ):
=== test/Halt.hs === 71330 steps user:0.00 sys:0.00 PASSED === test/Const.hs === 2422548 steps user:0.01 sys:0.00 PASSED === test/ExplicitCase.hs === 2873704 steps user:0.02 sys:0.00 PASSED === test/Hello.hs === 540952260 steps user:2.82 sys:0.00 PASSED === test/LocalFun.hs === 14103014 steps user:0.08 sys:0.00 PASSED === test/Lambda.hs === 12416333 steps user:0.07 sys:0.00 PASSED === test/Arithmetic.hs === 441625467 steps user:2.27 sys:0.00 PASSED === test/ShowList.hs === 1031462671 steps user:5.36 sys:0.00 PASSED === test/QuickSort.hs === 28503865233 steps user:144.20 sys:0.17 PASSED