Changelog for quickcheck-lockstep-0.8.0
Revision history for quickcheck-lockstep
0.8.0 -- 2025-07-03
-
BREAKING: Support
quickcheck-dynamic-4
. Going from version 3 to 4, some breaking changes were introduced inquickcheck-dynamic
, which cascades into changes forquickcheck-lockstep
. The changes to the latter are listed below together with hints as to how to migrate fromquickcheck-lockstep-0.7
toquickcheck-lockstep-0.8
. For migrating fromquickcheck-dynamic-3
toquickcheck-dynamic-4
, see thequickcheck-dynamic-4
changelog.-
The
Realized
type family is removed.-
Types of the form
Realized m a
are replaced bya
everywhere.Users should make this change in their own code as well.
-
Types of the form
LookUp m
are replaced byLookUp
everywhere.Users should make this change in their own code as well.
-
The
RealLookUp
type synonym no longer has anm
type argument, and theProxy m
type is removed from the right-hand side of the definition. Types of the formRealLookup m op
are replaced byRealLookup op
everywhere.Users should make this change in their own code as well. (Any values of) the type
Proxy m
that were previously passed to functions of theRealLookup
type can be removed. -
WrapRealized m
is replaced byIdentity
. TheWrapRealized m
type and its helper functions (intOpRealizedId
,intOpTransformer
) are removed completely. A new helper function calledintOpIdentity
is added. For theOp
from theSumProd
module, the instancesInterpretOp Op (WrapRealized IO)
,InterpretOp Op (WrapRealized (StateT s m))
, andInterpretOp Op (WrapRealized (ReaderT r m))
are removed and replaced by anInterpretOp Op Identity
instance.Instead of providing an
InterpretOp op (WrapRealized m)
instance, users should now provide anInterpretOp op Identity
instance ifop
is a custom type that is not included inquickcheck-lockstep
(likeSumProd.Op
, which comes an instance already defined). UseintOpIdentity
to help define this instance for customop
types.
-
-
The
Error
type family is moved fromStateModel
toRunModel
, and now requires an additionalm
type paramer. Forquickcheck-lockstep
, types of the formError st
are replaced byError st m
everywhere.The user should make this change in their own code as well.
-
-
PATCH: enable a bunch of GHC warnings
-
PATCH: use GHC2021, and if not available, enable all GHC2021 language extensions explicitly.
0.7.0 -- 2025-05-09
- BREAKING: Rename
lookupGVar
torealLookupVar
, and add aRealLookup
convenience alias that is used in the type ofRealLookupVar
. The type ofrealLookupVar
is slightly different than the type oflookupGVar
, but only in the positions of universal quantification over types. - NON-BREAKING: improved error messages for
realLookupVar
andlookupVar
, which might throw an error when variables are ill-defined or unevaluable. - PATCH: some documentation is moved from convenience aliases like
ModelFindVariables
to the functions have these aliases in their type, likefindVars
. - BREAKING: Enable verbose counterexamples by default in the 'postcondition' function using 'postconditionWith'.
- NON-BREAKING: Add a new 'postconditionWith' function that can be configured to produce more verbose counterexamples. With verbosity disabled, all states of the model are printed in a counterexample. If verbosity is enabled, the counterexample will also include all responses from the real system and the model.
- NON-BREAKING: Add a new
shrinkVar
function andModelShrinkVar
type alias. UseshrinkVar
to shrink variables to earlier variables of the same type. - PATCH: allow building with
ghc-9.12
- PATCH: support
containers-0.8
0.6.0 -- 2024-12-03
- BREAKING: Generalise
ModelFindVariables
andModelLookup
toModelVarContext
. Occurrences ofModelFindVariables
andModelLookup
in theInLockstep
class are replaced by the newly exposedModelVarContext
. AModelFindVariables
can be recovered from aModelVarContext
using the newfindVars
functions. AModelLookup
can be recovered from aModelVarContext
using the newlookupVars
function. Since these functions can be recovered fromModelVarContext
, existing tests are guaranteed to be adaptable to the newInLockstep
API. This breaking changes means that, for example ...
... should be changed to ...arbitraryWithVars lookupVars = ... (lookupVars ...)
arbitraryWithVars vctx = ... (lookupVars vctx ...)
0.5.1 -- 2024-08-27
- PATCH: allow building with
ghc-9.10
- PATCH: bump dependency versions for
containers
andQuickCheck
0.5.0 -- 2024-03-25
- BREAKING: Update
quickcheck-dynamic
dependency to>=3.4.1
. The main change is thatquickcheck-dynamic
'sStateModel
class now has an associated typeError
, the use of which is optional. However, as a result, some functions inquickcheck-lockstep
change type signatures: the defaultmonitoring
function,runActions
, andrunActionsBracket
.
0.4.1 -- 2024-03-20
- PATCH: fix compilation failures when using
mtl ^>=2.3
0.4.0 -- 2024-02-17
- BREAKING: Counter-examples now produce valid code. To facilitate this,
HasVariables
andShow
instances have changed, and a newunsafeMkGVar
smart constructor is exposed. - Add compatibility with ghc-9.8
0.3.0 -- 2023-10-17
- BREAKING: Update
quickcheck-dynamic
dependency to>=3.3
. - Add compatibility with ghc-9.6 (Javier Sagredo)
0.2.1 -- 2022-12-06
- Expose necessary definitions for custom
Operation
instances (Joris Dral)
0.2.0 -- 2022-11-11
- Relax bounds on
base
(support up to ghc 9.4) - Show real/mock response in addition to observable response
(see
showRealResponse
) - Add
labelActions
function - Generalise
runActionsBracket
(Joris Dral) - Expose getter for the model in
Lockstep
(Joris Dral)
0.1.0 -- 2022-10-11
- First release