Fix references.
[matthijs/master-project/report.git] / Chapters / Prototype.tex
index e2e5db7f0581a1d01315e683396dab6c942a66ac..ff24bb001403c3a339546c4cb93b074c8b84f406 100644 (file)
       support.
 
       \placeintermezzo{}{
       support.
 
       \placeintermezzo{}{
+        \defref{id function}
         \startframedtext[width=8cm,background=box,frame=no]
         \startalignment[center]
           {\tfa The \hs{id} function}
         \startframedtext[width=8cm,background=box,frame=no]
         \startalignment[center]
           {\tfa The \hs{id} function}
         A predicate type introduces a constraint on a type variable introduced
         by a forall type (or type lambda). In the example above, the type
         variable \lam{t} can only contain types that are an \emph{instance} of
         A predicate type introduces a constraint on a type variable introduced
         by a forall type (or type lambda). In the example above, the type
         variable \lam{t} can only contain types that are an \emph{instance} of
-        the \emph{type class} \lam{Show}. \refdef{type class}
+        the \emph{type class} \lam{Show}.
 
         There are other sorts of predicate types, used for the type families
         extension, which we will not discuss here.
 
         There are other sorts of predicate types, used for the type families
         extension, which we will not discuss here.
             res
       \stopbuffer
       \placeexample[here][ex:AvgStateRemoved]{Normalized version of \in{example}[ex:AvgState] with ignored parts crossed out}
             res
       \stopbuffer
       \placeexample[here][ex:AvgStateRemoved]{Normalized version of \in{example}[ex:AvgState] with ignored parts crossed out}
-          {\typebufferlam{AvgStatRemoved}}
+          {\typebufferlam{AvgStateRemoved}}
               
       When we actually leave out the crossed out parts, we get a slightly
       weird program: there is a variable \lam{s} which has no value, and there
               
       When we actually leave out the crossed out parts, we get a slightly
       weird program: there is a variable \lam{s} which has no value, and there
           {\typebuffervhdl{AccStateVHDL}}
       \placeexample[][ex:AvgStateVHDL]{\VHDL\ generated for \hs{avg} from \in{example}[ex:AvgState]}
           {\typebuffervhdl{AvgStateVHDL}}
           {\typebuffervhdl{AccStateVHDL}}
       \placeexample[][ex:AvgStateVHDL]{\VHDL\ generated for \hs{avg} from \in{example}[ex:AvgState]}
           {\typebuffervhdl{AvgStateVHDL}}
+  \section{Prototype implementation}
+    The prototype has been implemented using Haskell as its
+    implementation language, just like \GHC. This allows the prototype
+    do directly use parts of \GHC\ through the \small{API} it exposes
+    (which essentially taps directly into the internals of \GHC, making
+    this \small{API} not really a stable interface).
+
+    Cλash can be run from a separate library, but has also been
+    integrated into \type{ghci} \cite[baaij09]. The latter does requires
+    a custom \GHC\ build, however.
+
+    The latest version and all history of the Cλash code can be browsed
+    online or retrieved using the \type{git} program.
+
+    http://git.stderr.nl/gitweb?p=matthijs/projects/cλash.git
+
 %    \subsection{Initial state}
 %      How to specify the initial state? Cannot be done inside a hardware
 %      function, since the initial state is its own state argument for the first
 %    \subsection{Initial state}
 %      How to specify the initial state? Cannot be done inside a hardware
 %      function, since the initial state is its own state argument for the first