The Chip Model
chip :: Algs → ChipState → [Packet] → [Packet]
chip algs state ps = fst (runS (manyPackets algs ps) state)
manyPackets :: Algs → [Packet] → StateM ChipState [Packet]
manyPackets algs = mapM (onePacket algs)
onePacket :: Algs → Packet → StateM ChipState Packet
onePacket algs (chan,ws) =
do regfile ← liftM (\regs→FM.lookup regs chan) (inSnd load)
(ws',regfile') ← inFst (doPacket (algs chan) ws regfile)
finishPacket chan ws' regfile'
doPacket :: Alg → Data → RegFile → StateM Memory (Data,RegFile)
doPacket alg ws regf = ...
For all the details, view the code with pfebrowser...