Entropic Thoughts
16 hours ago
- The article describes implementing a digital circuit simulator in Haskell, closely following SICP's approach using mutable state and message-passing.
- Wires are defined with IORefs for signal value and action procedures, enabling the observer pattern where downstream components subscribe to signal changes.
- Basic gates (inverter, and_gate, or_gate) are implemented as action procedures that update output wires after a delay, using a global mutable agenda for scheduling.
- Higher-level circuits like half-adder and full-adder are composed by wiring gates together, demonstrating an open and composable component system.
- The simulator uses a global `the_agenda` via `unsafePerformIO` to manage propagation delays, allowing simulation of circuits like a ring oscillator.
- The author notes that while the code is impure, Haskell can still be used effectively with side effects, and future work could explore pure simulations using ST.