-
Add value-level ports via the new
SignalVandFwdVmarkers incircuitblocks. The circuit's logic is written over the values sampled each clock cycle; the plugin lifts it back to the signal level withfmap/bundle/unbundleand ties feedback loops with a lazy let binding. The bus-level markers still bind the raw forward channel and mix freely with value markers in one block;Fwdworks on any bus, while the bus-levelSignal(and newDSignal) markers now additionally enforce the bus type, which also drives type inference. See the README and example/ValueCircuits.hs.Breaking:
ExternalNamesgainedsignalTagName,fwdTagNameanddSignalTagNamefields, so custom plugins (e.g. clash-protocols style) need to supply them —defExternalNamesis now exported so they can be record updates of the defaults. -
Add a per-GHC
checksoutput to the flake, sonix flake check(ornix build .#checks.<system>.<ghc>) builds the package and runs all test suites against every supported GHC. The CI nix job now uses it. The error-location test suite skips itself (with a message) when the ambientghchas no circuit-notation package registered — as during a plain nix build of the package, where it previously failed. -
Fix the source location of type errors on a bus. Since bus tagging was introduced, such errors pointed at the end of the
circuitblock rather than at the offending statement. Generated bindings are now located at their circuit expression so GHC blames the right line. Generated bundle patterns and expressions also take the span of the ports they bundle, so whole-bundle errors (e.g. sharing a value-level variable across clock domains) are blamed on the ports rather than on the head of the circuit.
- Start of the changelog