packages feed

io-sim-1.8.0.0: CHANGELOG.md

# Revision history of io-sim

## next release

### Breaking changes

### Non-breaking changes

## 1.8.0.0

- Provided `MonadTraceMVar`
- Renamed `InspectMonad` to `InspectMonadSTM`
- Support `threadLabel` (`io-classes-1.8`)
- `IOSimPOR`'s `Effect` traces now will correctly show labels on read/written
  `TVars`.
- `Show` instance for `ScheduleMod` now prints `ThreadId`s in a slightly nicer
  way, matching the way those steps would be traced in the `SimTrace`.
- Implement `MonadLabelledMVar` instance for `(IOSim s)`
- `TVarId` is now a sum type with one constructor per `TVar` role, e.g. `TVar`,
  `TMVar`, `MVar` and a few others - except for `TChan`.
- A blocked `takeTVar` is now safe in the presence of exceptions. It will relay
  the value to other waiting threads.
- Faster handling of timeouts and timers by using a more efficient
  internal representation.
- The signature of:
  - `selectTraceEvents'`,
  - `selectTraceEventsDynamic'`,
  - `selectTraceEventsDynamicWithTime'`,
  - `selectTraceEventsSay'` and
  - `selectTraceEventsSayWithTime'`
  is more general.  These functions now accepts trace with any result, rather
  than one that finishes with `SimResult`.
- More polymorphic `ppTrace_` type signature.
- Fixed `tryReadTBQueue` when returning `Nothing`.
- Support ghc 9.12
- Export `Time` from `Control.Monad.IOSim`.

## 1.6.0.0

- Upgraded to `io-classes-1.6.0.0`

## 1.5.0.0

### Breaking changes

- Generalised the type of `traceSelectTraceEvents` & co.

### Non-breaking changes

- Added `writeTMVar` to `MonadSTM` instance for `(IOSim s)`.
- Fixes IOSimPOR test failure (see issue #154).
- Reverted commit 4534b6eae64072a87bd81584f479a123681358a3 which uses
  `unsafePerformIO` instead of ST, to regain lazyness on infinite simulations.
- Added a test to check for lazyness on infinite simulations

## 1.4.1.0

### Non-breaking changes

* QuickCheck monadic combinators: `monadicIOSim`, `monadicIOSim_` and `runIOSimGen` (#140).
* New dependency on `primitive`
* Provides an instance for `PrimMonad`, giving access to most functionality
  from the `primitive` package (#141).
* Prevented STM waking up threads blocked on `threadDelay` (#142).

## 1.4.0.0

### Breaking changes

* Removed `EventTimerUpdated` constructor (not used anymore).

### Non-breaking changes

* `Alternative` & `MonadPlus` instances for `IOSim`.
* Fixed `flushTQueue` implemetation.

## 1.3.1.0

### Non-breaking changes

* Optimised `io-sim` performance (improved memory footprint).
* Fixed a bug in `io-sim-por`: `execAtomically'` should not commit tvars.

## 1.3.0.0

### Breaking changes

* `MainReturn`, `MainException` and the pattern synonyms `TraceMainReturn`,
  `TraceMainException` changed their signature.  They will now also show the main thread id.
* Renamed `ThreadId` to `IOSimThreadId` to avoid a clash with `ThreadId`
  associated type family of `MonadFork`.  It makes it much simpler to paste
  failing `ScheduleControl` in `ghci` or tests.
* `BlockedReason` was modified: `BlockedOnOther` was removed, in favour of `BlockedOnDelay` and `BlockOnThrowTo`.
* The `Failure` type (for example returned by `runSim`) now also contains
  a constructor for internal failures.  This improved error reporting when
  there's a bug in `IOSimPOR`.  Currently it's only used by some of the
  assertions in `IOSimPOR`.

#### Non-breaking changes

* Refactored the internal API to avoid `unsafePerformIO`.
* Fixed bugs which lead to discovery of schedules which are impossible to run.
* Added haddocks, refactored the code base to improve readability.
* Fixed reported `step` in `EventTxWakup`
* Added debugging information schedule, (`explorationDebugLevel` option).
  Mostly useful for debugging `IOSimPOR` itself.  This information will
  contains `Effect`, discovered races and schedules.
* Addded or improved pretty printers for `SimTrace`.  Among other changes,
  a racy `StepId`: `(RacyThreadId [1,2], 2)`, is now pretty printed as `Thread
  {1,2}.2`, a non racy step is printed as `Thread [1,2].2`.
* Fixed trace of calls to the `deschedule` function.
* Exposed `Timeout` type as part of the `newTimeout` API.
* When `explorationDebugLevel` is set, avoid printing the same trace twice.
* Reimplemented `labelTVarIO` and `traceTVarIO` in `ST` monad, which simplifies
  trace of these calls.
* Fixed `traceTVar` for `TVar`'s created with `registerDelay`.
* Added pretty printer for `SimResult`, and other pretty printer improvements.
* Support `ghc-9.8`.

## 1.2.0.0

### Breaking changes

* `selectTraceEvents`, `selectTraceEvents'` catpure time of events.
* Added select function which capture the time of the trace events:
  - `selectTraceEventsDynamicWithTime`
  - `selectTraceEventsDynamicWithTime'`
  - `selectTraceEventsSayWithTime`
  - `selectTraceEventsSayWithTime'`

### Non-breaking changes

* Provide `MonadInspectMVar` instance for `IOSim`.
- Added NFData & NoThunks instances for `ThreadId`

## 1.1.0.0

### Non-breaking changes

* `io-classes-1.1.0.0`

## 1.0.0.1

### Non-breaking changes

* Support `ghc-9.6`.

## 1.0.0.0

### Breaking changes

* Support refactored `MonadTimer`, and new `MonadTimerFancy`, `MonadTimeNSec`
  monad classes.

## 0.6.0.0

### Breaking changes

* Added `TimeoutId` to `EventThreadDelay` and `EventThreadFired` events.

### Non-breaking changes

* Fixed `threadDelay` in presence of asynchronous exceptions (in `IOSim` and `IOSimPOR`) (#80).
* Fixed bug in `IOSim` & `IOSimPOR` which resulted in reusing existing
  `ThreadId`s (#80).

## 0.5.0.0

* `MVar` type family is not injective anymore.
* Removed default implementation of `readMVar` in the `MonadMVar` type class.
* Moved `MVarDefault` to `io-sim` package.

## 0.4.0.0

* support `ghc-9.4` (except on Windows input-output-hk/io-sim#51)
* `MonadCatch` instance for `STM (IOSim s)` monad
* fixed `isEmptyTBQueeuDefault` (thanks to @EMQ-YangM)
* refactored internal implementation of timeouts, changed `SimEventType`
  constructors

## 0.3.0.0

* added `Functor` instance for `SimResult`
* added `MonadFix` instance for `STM (IOSim s)`
* support `ghc-9.2` & `ghc-9.4`

## 0.2.0.0

* First version published on Hackage.
* Depends on `io-classes-0.2.0.0`.

## 0.1.0.0

* Initial version, not released on Hackage.