Start on conclusion
[matthijs/master-project/dsd-paper.git] / HigherOrderCPU.hs
index cc242bf50b25f15a7319e1bf485980430708bdb3..94bb7b6030d992cd46de713a57aa4b6e95b25a2d 100644 (file)
@@ -1,5 +1,4 @@
-{-# LANGUAGE TypeOperators, TemplateHaskell, TypeFamilies, 
-             ScopedTypeVariables, RecordWildCards, FlexibleContexts #-}
+{-# LANGUAGE TypeOperators, TemplateHaskell, TypeFamilies, ScopedTypeVariables #-}
 
 module HigherOrderCPU where
 
@@ -13,15 +12,8 @@ import CLasH.Translator.Annotations
 type Word   = SizedInt D16
 type Index  = RangedWord
 
-const :: a -> a -> a
 const a b = a
 
-fu :: ( PositiveT p, NaturalT n, (p :>: n) ~ True) =>
-  (a -> a -> a)
-  -> Vector p a
-  -> (Index n, Index n)
-  -> a
-  -> (a, a)
 fu op inputs (addr1, addr2) out =
   (out', out)
   where
@@ -43,8 +35,8 @@ cpu input addrs (State fuss) =
   where
     fures = (fu const inputs (addrs!(0 :: Index D3)) (fuss!(0 :: Index D3))) +> (
             (fu (+)   inputs (addrs!(1 :: Index D3)) (fuss!(1 :: Index D3))) +> (
-            (fu (-)   inputs (addrs!(2 :: Index D3)) (fuss!(2 :: Index D3))) +> ( singleton
-            (fu (*)   inputs (addrs!(3 :: Index D3)) (fuss!(3 :: Index D3))))))
+            (fu (-)   inputs (addrs!(2 :: Index D3)) (fuss!(2 :: Index D3))) +> (
+            (fu (*)   inputs (addrs!(3 :: Index D3)) (fuss!(3 :: Index D3))) +> empty)))
     (fuss', outputs) = unzip fures
     inputs = 0 +> (1 +> (input +> outputs))
     out = head outputs