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
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
\subsection{Higher order CPU}
\begin{code}
-fu :: (a -> a -> a)
- -> [a | n]
- -> (Index (n - 1), Index (n - 1))
- -> a
- -> (a, a)
fu op inputs (addr1, addr2) (State out) =
(State out', out)
where
\end{code}
\begin{code}
-type CpuState = State [Word | 4]
-
-cpu :: Word
- -> [(Index 6, Index 6) | 4]
- -> CpuState
- -> (CpuState, Word)
+cpu :: Word -> [(Index 6, Index 6) | 4]
+ -> State [Word | 4] -> (State [Word | 4], Word)
cpu input addrs (State fuss) = (State fuss', out)
where
fures = [ fu const inputs (addrs!0) (fuss!0)