|
9 | 9 | * concurrency: both low level `forkIO` as well as `async` style
|
10 | 10 | * strict STM
|
11 | 11 | * access to lazy ST
|
12 |
| -* schedule discovery (see [IOSimPOR](./how-to-use-IOSimPOR.md) |
| 12 | +* schedule discovery (see [IOSimPOR](./how-to-use-IOSimPOR.md)) |
13 | 13 | * eventlog
|
14 | 14 | * dynamic tracing
|
15 | 15 | * tracing committed changes to `TVar`, `TMVar`s, ...
|
16 | 16 | * labeling of threads, `TVar`'s, ...
|
17 | 17 |
|
18 | 18 | `io-classes` provide a common interface, which allow to write code which can be
|
19 |
| -run in both real `IO` and `IOSim`. It is a drop-in replacement for `IO`. |
| 19 | +run in both real `IO` and `IOSim`. It is a drop-in replacement for `IO`. |
20 | 20 |
|
21 | 21 | One of the principles of `io-classes` was to stay as close to `IO` as possible,
|
22 | 22 | thus most of the `IO` instances are directly referring to `base`, `async` api.
|
23 | 23 | However we made some differences, which are reported below.
|
24 | 24 |
|
25 | 25 | `io-classes` supports a novel hierarchy for error handling monads as well more
|
26 |
| -familiar `exception` style. The new hierarchy provides `bracket` and |
| 26 | +familiar `exception` style. The new hierarchy provides `bracket` and |
27 | 27 | `finally` functions in the `MonadThrow` class, while `catch` style operators
|
28 |
| -are provided by a super-class `MonadCatch`. Both `bracket` and `finally` are |
| 28 | +are provided by a super-class `MonadCatch`. Both `bracket` and `finally` are |
29 | 29 | the most common interface used to write code with robust exception handling,
|
30 | 30 | exposing them through the more basic `MonadThrow` class informs the reader
|
31 |
| -/ reviewer than no tricky error handling is done in that section of the code |
| 31 | +/ reviewer that no tricky error handling is done in that section of the code |
32 | 32 | base.
|
33 | 33 |
|
34 | 34 | `IOSim` exposes a detailed trace, which can be enhanced by labelling threads,
|
35 | 35 | or mutable variables, tracing `Dynamic` values (which can be recovered from the
|
36 |
| -trace) or simple `String` based tracing. It has been used to develop & test |
| 36 | +trace) or simple `String` based tracing. It has been used to develop & test |
37 | 37 | a complex concurrent system ([ouroboros-network][ouroboros-network]), in
|
38 | 38 | particular
|
39 | 39 |
|
@@ -67,9 +67,9 @@ type Async :: (Type -> Type) -> Type -> Type
|
67 | 67 |
|
68 | 68 | The first type of kind `Type -> Type` describe the monad which could be
|
69 | 69 | instantiated to `IO`, `IOSim` or some other monad stack build with monad
|
70 |
| -transformers. The same applies to many other types, e.g. `TVar`, `TMVar`. |
| 70 | +transformers. The same applies to many other types, e.g. `TVar`, `TMVar`. |
71 | 71 |
|
72 |
| - The types although similar to the original |
| 72 | +The types although similar to the original |
73 | 73 | are not the same as the ones that come from `base`, `async`, or
|
74 | 74 | `excpetions` packages:
|
75 | 75 |
|
|
0 commit comments