Changelog for haal-0.5.0.0
Changelog for haal
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to the Haskell Package Versioning Policy.
Unreleased
0.5.0.0 - 2026-04-22
Fixed
Haal.Learning.LMstar.equivalenceClassesnow iterates overSmonly, matching Definition 2 of Shahbaz & Groz, "Inferring Mealy Machines". Previously it iterated overSm ∪ Sm·I, which could pick a representative fromSm·Iwhoserep++[i]was not in the observation table, causingmakeHypothesisto fail on many real protocol models (DTLS, medium MQTT) with"invariant violation — makeHypothesis failed on closed consistent table".
Changed (breaking)
Haal.Learning.LMstar.otIsConsistenttightens its output constraint fromEq otoOrd oto support Map-based row grouping.
Changed
Haal.Learning.LMstar.otIsConsistentgroups prefixes by row signature before pairwise comparison, reducing the worst-case pair enumeration.Haal.Dot.parseDotusesSet.fromListinstead ofnubfor deduplication (O(n²) → O(n log n)).
Added
tasty-bench-based benchmark suite inbench/covering BlackBox operations, W-method / Wp-method test-suite generation, DOT serialize/parse/roundtrip, and end-to-end learning experiments. Run withstack bench haal.
0.4.1.0 - 2026-03-21
Added
- Serializer from Mealy Automaton to Dot format.
- haal-gen executable that accepts a .dot file and produces a haskell module that exports a function for the specified Mealy Automaton, with specific input and output types, rather than just using String for both.
- haal-models subpackage that exports learned models of tls, mqtt, tcp and dtls protocols.
0.4.0.2 - 2026-03-17
Changed
- Dependency bounds.
0.4.0.1 - 2026-03-17
Added
- Optional
liquidCabal flag (--flag haal:liquid) to enable LiquidHaskell verification without requiring it as a dependency for normal builds.
Verified
Haal.BlackBox:walkproduces outputs of length equal to the input length.Haal.Learning.LMstar:ObservationTableinvariant that all entries inmappingTmap to non-empty output lists, preserved acrossupdateMap,makeConsistent,makeClosed, andinitializeOT.
0.4.0.0 - 2026-03-16
Changed
- Changed the types of oracles' constructors from
<Oracle>toEither String <Oracle>whereStringis an error message indicating invalid values to<OracleConfig>. Now, for example, instead oforacle = mkWMethod (WMethodConfig 2), one should either pattern match withcaseor dooracle = either error id (mkWMethod (WMethodConfig 2)).
0.3.0.0 - 2026-03-11
Changed
SULtypeclass no longer takesiandoas class parameters; they are now universally quantified in the method signatures. Instances should dropi ofrom their instance heads:instance SUL MyType IOinstead ofinstance SUL MyType IO Input Output.Automatontypeclass likewise dropsiandofrom its class head. All constraint occurrences(Automaton aut s i o)become(Automaton aut s).
0.2.0.0 - 2026-03-05
Added
stepPure,walkPure,resetPureexported fromHaal.BlackBoxConfigrecord types for all equivalence oracles:WMethodConfig,WpMethodConfig,RandomWalkConfig,RandomWordsConfig,RandomWMethodConfig,RandomWpMethodConfigmkCombinedOraclesmart constructor forCombinedOraclerandomWordsConfigaccessor forRandomWordsmealyDelta,mealyLambdaas explicit named exports fromHaal.Automaton.MealyAutomaton
Changed
- All oracle constructors now take a
Configrecord instead of positional arguments:mkWMethod :: WMethodConfig -> WMethod,mkWpMethod :: WpMethodConfig -> WpMethod, etc. mkRandomWMethodandmkRandomWpMethodnow take aConfigrecord instead of positional arguments (also fixes an argument-order bug in the old interface)
Removed
mealyStepfromHaal.Automaton.MealyAutomaton; usestepPurefromHaal.BlackBoxmooreStepfromHaal.Automaton.MooreAutomaton; usestepPurefromHaal.BlackBox- Raw constructor exports (
MealyAutomaton (..),WMethod (..),WpMethod (..),RandomWalk (..),RandomWords (..),CombinedOracle (..),LMstar (..)); use the correspondingmk-prefixed smart constructors instead
0.1.0.0 - 2025-12-02
- Initial release of
haal.- Support for Mealy Automata and DFAs.
- One learner for Mealy Automata and DFAs with 2 configurations.
- LStar.
- LPlus.
- Basic equivalence oracles.
- Examples that showcase usage of the library.