4 \frametitle{Future Work: Recursion}
6 \item The most pressing future work is to support recursive functions.
7 \item Partially explored solution: static loop unrolling
8 \item Unexplored solution: Haskell language extensions, new source language
12 \subsection{Static loop unrolling}
14 \frametitle{Static loop unrolling}
16 \item Unroll, and simplify recursive definitions at compile time.
17 \item Explored solution: Unrolling number-guided recursive functions using Template Haskell
22 \frametitle{Template Haskell}
24 \item Template Haskell allows for compile-time inspection, construction, and manipulation of Haskell code.
25 \item All these functions are expressible in normal Haskell
30 \frametitle{Tree Adder}
34 treeSum :: Vector D8 (SizedWord D8) -> SizedWord D8;
35 treeSum xs = undefined
38 treeSum i xs | i < 1 = head xs
39 | otherwise = let (a,b) = split xs
40 in (treeSum (i-1) a) +
43 let func' = unroll Nothing 0 (IntegerL 3) funct
50 \frametitle{Unrolled tree adder}
52 \includegraphics[height=5cm]{treeadder}
56 \subsection{Input Language}
58 \frametitle{Input Language}
60 \item New source language: One of the problems is that Haskell does not properly support dependent types. Investigate languages with dependent type systems.
61 \item Haskell extentions: Invariant descriptions at the type-level.