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...