2ce4fd36c72015c491a584df4e05fcc28c75282b
[ghc.git] / libraries / base / changelog.md
1 # Changelog for [`base` package](http://hackage.haskell.org/package/base)
2
3 ## 4.11.0.0 *TBA*
4   * Bundled with GHC 8.4.1
5
6   * Add `Alternative` instance for `ZipList` (#13520)
7
8   * Add instances `Num`, `Functor`, `Applicative`, `Monad`, `Semigroup`
9     and `Monoid` for `Data.Ord.Down` (#13097).
10
11   * Add `Semigroup` instance for `EventLifetime`.
12
13   * Make `Semigroup` a superclass of `Monoid`;
14     export `Semigroup((<>))` from `Prelude`; remove `Monoid` reexport
15     from `Data.Semigroup` (#14191).
16
17   * Generalise `instance Monoid a => Monoid (Maybe a)` to
18     `instance Semigroup a => Monoid (Maybe a)`.
19
20   * Add `infixl 9 !!` declaration for `Data.List.NonEmpty.!!`
21
22   * Add `<&>` operator to `Data.Functor` (#14029)
23
24   * Remove the deprecated `Typeable{1..7}` type synonyms (#14047)
25
26   * Make `Data.Type.Equality.==` a closed type family. It now works for all
27   kinds out of the box. Any modules that previously declared instances of this
28   family will need to remove them. Whereas the previous definition was somewhat
29   ad hoc, the behavior is now completely uniform. As a result, some applications
30   that used to reduce no longer do, and conversely. Most notably, `(==)` no
31   longer treats the `*`, `j -> k`, or `()` kinds specially; equality is
32   tested structurally in all cases.
33
34   * Add instances `Semigroup` and `Monoid` for `Control.Monad.ST` (#14107).
35
36   * The `Read` instances for `Proxy`, `Coercion`, `(:~:)`, `(:~~:)`, and `U1`
37     now ignore the parsing precedence. The effect of this is that `read` will
38     be able to successfully parse more strings containing `"Proxy"` _et al._
39     without surrounding parentheses (e.g., `"Thing Proxy"`) (#12874).
40
41   * Add `iterate'`, a strict version of `iterate`, to `Data.List`
42     and `Data.OldList` (#3474)
43
44   * Add `Data` instances for `IntPtr` and `WordPtr` (#13115)
45
46   * Add missing `MonadFail` instance for `Control.Monad.Strict.ST.ST`
47
48   * Make `zipWith` and `zipWith3` inlinable (#14224)
49
50   * `Type.Reflection.withTypeable` is now polymorphic in the `RuntimeRep` of
51     its result.
52
53   * Add `installSEHHandlers` to `MiscFlags` in `GHC.RTS.Flags` to determine if
54     exception handling is enabled.
55
56 ## 4.10.0.0 *July 2017*
57   * Bundled with GHC 8.2.1
58
59   * `Data.Type.Bool.Not` given a type family dependency (#12057).
60
61   * `Foreign.Ptr` now exports the constructors for `IntPtr` and `WordPtr`
62     (#11983)
63
64   * `Generic1`, as well as the associated datatypes and typeclasses in
65     `GHC.Generics`, are now poly-kinded (#10604)
66
67   * `New modules `Data.Bifoldable` and `Data.Bitraversable` (previously defined
68     in the `bifunctors` package) (#10448)
69
70   * `Data.Either` now provides `fromLeft` and `fromRight` (#12402)
71
72   * `Data.Type.Coercion` now provides `gcoerceWith` (#12493)
73
74   * New methods `liftReadList(2)` and `liftReadListPrec(2)` in the
75     `Read1`/`Read2` classes that are defined in terms of `ReadPrec` instead of
76     `ReadS`, as well as related combinators, have been added to
77     `Data.Functor.Classes` (#12358)
78
79   * Add `Semigroup` instance for `IO`, as well as for `Event` and `Lifetime`
80     from `GHC.Event` (#12464)
81
82   * Add `Data` instance for `Const` (#12438)
83
84   * Added `Eq1`, `Ord1`, `Read1` and `Show1` instances for `NonEmpty`.
85
86   * Add wrappers for `blksize_t`, `blkcnt_t`, `clockid_t`, `fsblkcnt_t`,
87     `fsfilcnt_t`, `id_t`, `key_t`, and `timer_t` to System.Posix.Types (#12795)
88
89   * Add `CBool`, a wrapper around C's `bool` type, to `Foreign.C.Types`
90     (#13136)
91
92   * Raw buffer operations in `GHC.IO.FD` are now strict in the buffer, offset, and length operations (#9696)
93
94   * Add `plusForeignPtr` to `Foreign.ForeignPtr`.
95
96   * Add `type family AppendSymbol (m :: Symbol) (n :: Symbol) :: Symbol` to `GHC.TypeLits`
97     (#12162)
98
99   * Add `GHC.TypeNats` module with `Natural`-based `KnownNat`. The `Nat`
100     operations in `GHC.TypeLits` are a thin compatibility layer on top.
101     Note: the `KnownNat` evidence is changed from an `Integer` to a `Natural`.
102
103   * The type of `asProxyTypeOf` in `Data.Proxy` has been generalized (#12805)
104
105   * `liftA2` is now a method of the `Applicative` class. `liftA2` and
106     `<*>` each have a default implementation based on the other. Various
107     library functions have been updated to use `liftA2` where it might offer
108     some benefit. `liftA2` is not yet in the `Prelude`, and must currently be
109     imported from `Control.Applicative`. It is likely to be added to the
110     `Prelude` in the future. (#13191)
111
112   * A new module, `Type.Reflection`, exposing GHC's new type-indexed type
113     representation mechanism is now provided.
114
115   * `Data.Dynamic` now exports the `Dyn` data constructor, enabled by the new
116     type-indexed type representation mechanism.
117
118   * `Data.Type.Equality` now provides a kind heterogeneous type equality
119     evidence type, `(:~~:)`.
120
121   * The `CostCentresXML` constructor of `GHC.RTS.Flags.DoCostCentres` has been
122     replaced by `CostCentresJSON` due to the new JSON export format supported by
123     the cost centre profiler.
124
125   * The `ErrorCall` pattern synonym has been given a `COMPLETE` pragma so that
126     functions which solely match again `ErrorCall` do not produce
127     non-exhaustive pattern-match warnings (#8779)
128
129   * Change the implementations of `maximumBy` and `minimumBy` from
130     `Data.Foldable` to use `foldl1` instead of `foldr1`. This makes them run
131     in constant space when applied to lists. (#10830)
132
133   * `mkFunTy`, `mkAppTy`, and `mkTyConApp` from `Data.Typeable` no longer exist.
134     This functionality is superceded by the interfaces provided by
135     `Type.Reflection`.
136
137   * `mkTyCon3` is no longer exported by `Data.Typeable`. This function is
138     replaced by `Type.Reflection.Unsafe.mkTyCon`.
139
140   * `Data.List.NonEmpty.unfold` has been deprecated in favor of `unfoldr`,
141     which is functionally equivalent.
142
143 ## 4.9.0.0  *May 2016*
144
145   * Bundled with GHC 8.0
146
147   * `error` and `undefined` now print a partial stack-trace alongside the error message.
148
149   * New `errorWithoutStackTrace` function throws an error without printing the stack trace.
150
151   * The restore operation provided by `mask` and `uninterruptibleMask` now
152     restores the previous masking state whatever the current masking state is.
153
154   * New `GHC.Generics.packageName` operation
155
156   * Redesigned `GHC.Stack.CallStack` data type. As a result, `CallStack`'s
157     `Show` instance produces different output, and `CallStack` no longer has an
158     `Eq` instance.
159
160   * New `GHC.Generics.packageName` operation
161
162   * New `GHC.Stack.Types` module now contains the definition of
163     `CallStack` and `SrcLoc`
164
165   * New `GHC.Stack.Types.emptyCallStack` function builds an empty `CallStack`
166
167   * New `GHC.Stack.Types.freezeCallStack` function freezes a `CallStack` preventing future `pushCallStack` operations from having any effect
168
169   * New `GHC.Stack.Types.pushCallStack` function pushes a call-site onto a `CallStack`
170
171   * New `GHC.Stack.Types.fromCallSiteList` function creates a `CallStack` from
172     a list of call-sites (i.e., `[(String, SrcLoc)]`)
173
174   * `GHC.SrcLoc` has been removed
175
176   * `GHC.Stack.showCallStack` and `GHC.SrcLoc.showSrcLoc` are now called
177     `GHC.Stack.prettyCallStack` and `GHC.Stack.prettySrcLoc` respectively
178
179   * add `Data.List.NonEmpty` and `Data.Semigroup` (to become
180     super-class of `Monoid` in the future). These modules were
181     provided by the `semigroups` package previously. (#10365)
182
183   * Add `selSourceUnpackedness`, `selSourceStrictness`, and
184     `selDecidedStrictness`, three functions which look up strictness
185     information of a field in a data constructor, to the `Selector` type class
186     in `GHC.Generics` (#10716)
187
188   * Add `URec`, `UAddr`, `UChar`, `UDouble`, `UFloat`, `UInt`, and `UWord` to
189     `GHC.Generics` as part of making GHC generics capable of handling
190     unlifted types (#10868)
191
192   * The `Eq`, `Ord`, `Read`, and `Show` instances for `U1` now use lazier
193     pattern-matching
194
195   * Keep `shift{L,R}` on `Integer` with negative shift-arguments from
196     segfaulting (#10571)
197
198   * Add `forkOSWithUnmask` to `Control.Concurrent`, which is like
199     `forkIOWithUnmask`, but the child is run in a bound thread.
200
201   * The `MINIMAL` definition of `Arrow` is now `arr AND (first OR (***))`.
202
203   * The `MINIMAL` definition of `ArrowChoice` is now `left OR (+++)`.
204
205   * Exported `GiveGCStats`, `DoCostCentres`, `DoHeapProfile`, `DoTrace`,
206     `RtsTime`, and `RtsNat` from `GHC.RTS.Flags`
207
208   * New function `GHC.IO.interruptible` used to correctly implement
209     `Control.Exception.allowInterrupt` (#9516)
210
211   * Made `PatternMatchFail`, `RecSelError`, `RecConError`, `RecUpdError`,
212     `NoMethodError`, and `AssertionFailed` newtypes (#10738)
213
214   * New module `Control.Monad.IO.Class` (previously provided by `transformers`
215     package). (#10773)
216
217   * New modules `Data.Functor.Classes`, `Data.Functor.Compose`,
218     `Data.Functor.Product`, and `Data.Functor.Sum` (previously provided by
219     `transformers` package). (#11135)
220
221   * New instances for `Proxy`: `Eq1`, `Ord1`, `Show1`, `Read1`. All
222     of the classes are from `Data.Functor.Classes` (#11756).
223
224   * New module `Control.Monad.Fail` providing new `MonadFail(fail)`
225     class (#10751)
226
227   * Add `GHC.TypeLits.TypeError` and `ErrorMessage` to allow users
228     to define custom compile-time error messages.
229
230   * Redesign `GHC.Generics` to use type-level literals to represent the
231     metadata of generic representation types (#9766)
232
233   * The `IsString` instance for `[Char]` has been modified to eliminate
234     ambiguity arising from overloaded strings and functions like `(++)`.
235
236   * Move `Const` from `Control.Applicative` to its own module in
237    `Data.Functor.Const`. (#11135)
238
239   * Re-export `Const` from `Control.Applicative` for backwards compatibility.
240
241   * Expand `Floating` class to include operations that allow for better
242     precision: `log1p`, `expm1`, `log1pexp` and `log1mexp`. These are not
243     available from `Prelude`, but the full class is exported from `Numeric`.
244
245   * New `Control.Exception.TypeError` datatype, which is thrown when an
246     expression fails to typecheck when run using `-fdefer-type-errors` (#10284)
247
248 ### New instances
249
250   * `Alt`, `Dual`, `First`, `Last`, `Product`, and `Sum` now have `Data`,
251     `MonadZip`, and `MonadFix` instances
252
253   * The datatypes in `GHC.Generics` now have `Enum`, `Bounded`, `Ix`,
254     `Functor`, `Applicative`, `Monad`, `MonadFix`, `MonadPlus`, `MonadZip`,
255     `Foldable`, `Foldable`, `Traversable`, `Generic1`, and `Data` instances
256     as appropriate.
257
258   * `Maybe` now has a `MonadZip` instance
259
260   * `All` and `Any` now have `Data` instances
261
262   * `Dual`, `First`, `Last`, `Product`, and `Sum` now have `Foldable` and
263     `Traversable` instances
264
265   * `Dual`, `Product`, and `Sum` now have `Functor`, `Applicative`, and
266     `Monad` instances
267
268   * `(,) a` now has a `Monad` instance
269
270   * `ZipList` now has `Foldable` and `Traversable` instances
271
272   * `Identity` now has `Semigroup` and `Monoid` instances
273
274   * `Identity` and `Const` now have `Bits`, `Bounded`, `Enum`, `FiniteBits`,
275     `Floating`, `Fractional`, `Integral`, `IsString`, `Ix`, `Num`, `Real`,
276     `RealFloat`, `RealFrac` and `Storable` instances. (#11210, #11790)
277
278   * `()` now has a `Storable` instance
279
280   * `Complex` now has `Generic`, `Generic1`, `Functor`, `Foldable`, `Traversable`,
281     `Applicative`, and `Monad` instances
282
283   * `System.Exit.ExitCode` now has a `Generic` instance
284
285   * `Data.Version.Version` now has a `Generic` instance
286
287   * `IO` now has a `Monoid` instance
288
289   * Add `MonadPlus IO` and `Alternative IO` instances
290     (previously orphans in `transformers`) (#10755)
291
292   * `CallStack` now has an `IsList` instance
293
294   * The field `spInfoName` of `GHC.StaticPtr.StaticPtrInfo` has been removed.
295     The value is no longer available when constructing the `StaticPtr`.
296
297   * `VecElem` and `VecCount` now have `Enum` and `Bounded` instances.
298
299 ### Generalizations
300
301   * Generalize `Debug.Trace.{traceM, traceShowM}` from `Monad` to `Applicative`
302     (#10023)
303
304   * Redundant typeclass constraints have been removed:
305      - `Data.Ratio.{denominator,numerator}` have no `Integral` constraint anymore
306      - **TODO**
307
308   * Generalise `forever` from `Monad` to `Applicative`
309
310   * Generalize `filterM`, `mapAndUnzipM`, `zipWithM`, `zipWithM_`, `replicateM`,
311     `replicateM_` from `Monad` to `Applicative` (#10168)
312
313   * The `Generic` instance for `Proxy` is now poly-kinded (#10775)
314
315   * Enable `PolyKinds` in the `Data.Functor.Const` module to give `Const`
316     the kind `* -> k -> *`. (#10039)
317
318
319 ## 4.8.2.0  *Oct 2015*
320
321   * Bundled with GHC 7.10.3
322
323   * The restore operation provided by `mask` and `uninterruptibleMask` now
324     restores the previous masking state whatever the current masking state is.
325
326   * Exported `GiveGCStats`, `DoCostCentres`, `DoHeapProfile`, `DoTrace`,
327     `RtsTime`, and `RtsNat` from `GHC.RTS.Flags`
328
329 ## 4.8.1.0  *Jul 2015*
330
331   * Bundled with GHC 7.10.2
332
333   * `Lifetime` is now exported from `GHC.Event`
334
335   * Implicit-parameter based source location support exposed in `GHC.SrcLoc` and `GHC.Stack`.
336     See GHC User's Manual for more information.
337
338 ## 4.8.0.0  *Mar 2015*
339
340   * Bundled with GHC 7.10.1
341
342   * Make `Applicative` a superclass of `Monad`
343
344   * Add reverse application operator `Data.Function.(&)`
345
346   * Add `Data.List.sortOn` sorting function
347
348   * Add `System.Exit.die`
349
350   * Deprecate `versionTags` field of `Data.Version.Version`.
351     Add `makeVersion :: [Int] -> Version` constructor function to aid
352     migration to a future `versionTags`-less `Version`.
353
354   * Add `IsList Version` instance
355
356   * Weaken RealFloat constraints on some `Data.Complex` functions
357
358   * Add `Control.Monad.(<$!>)` as a strict version of `(<$>)`
359
360   * The `Data.Monoid` module now has the `PolyKinds` extension
361     enabled, so that the `Monoid` instance for `Proxy` are polykinded
362     like `Proxy` itself is.
363
364   * Make `abs` and `signum` handle (-0.0) correctly per IEEE-754.
365
366   * Re-export `Data.Word.Word` from `Prelude`
367
368   * Add `countLeadingZeros` and `countTrailingZeros` methods to
369     `Data.Bits.FiniteBits` class
370
371   * Add `Data.List.uncons` list destructor (#9550)
372
373   * Export `Monoid(..)` from `Prelude`
374
375   * Export `Foldable(..)` from `Prelude`
376     (hiding `fold`, `foldl'`, `foldr'`, and `toList`)
377
378   * Export `Traversable(..)` from `Prelude`
379
380   * Set fixity for `Data.Foldable.{elem,notElem}` to match the
381     conventional one set for `Data.List.{elem,notElem}` (#9610)
382
383   * Turn `toList`, `elem`, `sum`, `product`, `maximum`, and `minimum`
384     into `Foldable` methods (#9621)
385
386   * Replace the `Data.List`-exported functions
387
388     ```
389     all, and, any, concat, concatMap, elem, find, product, sum,
390     mapAccumL, mapAccumR
391     ```
392
393     by re-exports of their generalised `Data.Foldable`/`Data.Traversable`
394     counterparts.  In other words, unqualified imports of `Data.List`
395     and `Data.Foldable`/`Data.Traversable` no longer lead to conflicting
396     definitions. (#9586)
397
398   * New (unofficial) module `GHC.OldList` containing only list-specialised
399     versions of the functions from `Data.List` (in other words, `GHC.OldList`
400     corresponds to `base-4.7.0.2`'s `Data.List`)
401
402   * Replace the `Control.Monad`-exported functions
403
404     ```
405     sequence_, msum, mapM_, forM_,
406     forM, mapM, sequence
407     ```
408
409     by re-exports of their generalised `Data.Foldable`/`Data.Traversable`
410     counterparts.  In other words, unqualified imports of `Control.Monad`
411     and `Data.Foldable`/`Data.Traversable` no longer lead to conflicting
412     definitions. (#9586)
413
414   * Generalise `Control.Monad.{when,unless,guard}` from `Monad` to
415     `Applicative` and from `MonadPlus` to `Alternative` respectively.
416
417   * Generalise `Control.Monad.{foldM,foldM_}` to `Foldable`
418
419   * `scanr`, `mapAccumL` and `filterM` now take part in list fusion (#9355,
420     #9502, #9546)
421
422   * Remove deprecated `Data.OldTypeable` (#9639)
423
424   * New module `Data.Bifunctor` providing the `Bifunctor(bimap,first,second)`
425     class (previously defined in `bifunctors` package) (#9682)
426
427   * New module `Data.Void` providing the canonical uninhabited type `Void`
428     (previously defined in `void` package) (#9814)
429
430   * Update Unicode class definitions to Unicode version 7.0
431
432   * Add `Alt`, an `Alternative` wrapper, to `Data.Monoid`. (#9759)
433
434   * Add `isSubsequenceOf` to `Data.List` (#9767)
435
436   * The arguments to `==` and `eq` in `Data.List.nub` and `Data.List.nubBy`
437     are swapped, such that `Data.List.nubBy (<) [1,2]` now returns `[1]`
438     instead of `[1,2]` (#2528, #3280, #7913)
439
440   * New module `Data.Functor.Identity` (previously provided by `transformers`
441     package). (#9664)
442
443   * Add `scanl'`, a strictly accumulating version of `scanl`, to `Data.List`
444     and `Data.OldList`. (#9368)
445
446   * Add `fillBytes` to `Foreign.Marshal.Utils`.
447
448   * Add new `displayException` method to `Exception` typeclass. (#9822)
449
450   * Add `Data.Bits.toIntegralSized`, a size-checked version of
451     `fromIntegral`. (#9816)
452
453   * New module `Numeric.Natural` providing new `Natural` type
454     representing non-negative arbitrary-precision integers.  The `GHC.Natural`
455     module exposes additional GHC-specific primitives. (#9818)
456
457   * Add `(Storable a, Integeral a) => Storable (Ratio a)` instance (#9826)
458
459   * Add `Storable a => Storable (Complex a)` instance (#9826)
460
461   * New module `GHC.RTS.Flags` that provides accessors to runtime flags.
462
463   * Expose functions for per-thread allocation counters and limits in `GHC.Conc`
464
465         disableAllocationLimit :: IO ()
466         enableAllocationLimit :: IO ()
467         getAllocationCounter :: IO Int64
468         setAllocationCounter :: Int64 -> IO ()
469
470     together with a new exception `AllocationLimitExceeded`.
471
472   * Make `read . show = id` for `Data.Fixed` (#9240)
473
474   * Add `calloc` and `callocBytes` to `Foreign.Marshal.Alloc`. (#9859)
475
476   * Add `callocArray` and `callocArray0` to `Foreign.Marshal.Array`. (#9859)
477
478   * Restore invariant in `Data (Ratio a)` instance (#10011)
479
480   * Add/expose `rnfTypeRep`, `rnfTyCon`, `typeRepFingerprint`, and
481     `tyConFingerprint` helpers to `Data.Typeable`.
482
483   * Define proper `MINIMAL` pragma for `class Ix`. (#10142)
484
485 ## 4.7.0.2  *Dec 2014*
486
487   * Bundled with GHC 7.8.4
488
489   * Fix performance bug in `Data.List.inits` (#9345)
490
491   * Fix handling of null bytes in `Debug.Trace.trace` (#9395)
492
493 ## 4.7.0.1  *Jul 2014*
494
495   * Bundled with GHC 7.8.3
496
497   * Unhide `Foreign.ForeignPtr` in Haddock (#8475)
498
499   * Fix recomputation of `TypeRep` in `Typeable` type-application instance
500     (#9203)
501
502   * Fix regression in Data.Fixed Read instance (#9231)
503
504   * Fix `fdReady` to honor `FD_SETSIZE` (#9168)
505
506 ## 4.7.0.0  *Apr 2014*
507
508   * Bundled with GHC 7.8.1
509
510   * Add `/Since: 4.[4567].0.0/` Haddock annotations to entities
511     denoting the package version, when the given entity was introduced
512     (or its type signature changed in a non-compatible way)
513
514   * The `Control.Category` module now has the `PolyKinds` extension
515     enabled, meaning that instances of `Category` no longer need be of
516     kind `* -> * -> *`.
517
518   * There are now `Foldable` and `Traversable` instances for `Either a`,
519    `Const r`, and `(,) a`.
520
521   * There are now `Show`, `Read`, `Eq`, `Ord`, `Monoid`, `Generic`, and
522     `Generic1` instances for `Const`.
523
524   * There is now a `Data` instance for `Data.Version`.
525
526   * A new `Data.Bits.FiniteBits` class has been added to represent
527     types with fixed bit-count. The existing `Bits` class is extended
528     with a `bitSizeMaybe` method to replace the now obsolete
529     `bitsize` method.
530
531   * `Data.Bits.Bits` gained a new `zeroBits` method which completes the
532     `Bits` API with a direct way to introduce a value with all bits cleared.
533
534   * There are now `Bits` and `FiniteBits` instances for `Bool`.
535
536   * There are now `Eq`, `Ord`, `Show`, `Read`, `Generic`. and `Generic1`
537     instances for `ZipList`.
538
539   * There are now `Eq`, `Ord`, `Show` and `Read` instances for `Down`.
540
541   * There are now `Eq`, `Ord`, `Show`, `Read` and `Generic` instances
542     for types in GHC.Generics (`U1`, `Par1`, `Rec1`, `K1`, `M1`,
543     `(:+:)`, `(:*:)`, `(:.:)`).
544
545   * `Data.Monoid`: There are now `Generic` instances for `Dual`, `Endo`,
546     `All`, `Any`, `Sum`, `Product`, `First`, and `Last`; as well as
547     `Generic1` instances for `Dual`, `Sum`, `Product`, `First`, and `Last`.
548
549   * The `Data.Monoid.{Product,Sum}` newtype wrappers now have `Num` instances.
550
551   * There are now `Functor` instances for `System.Console.GetOpt`'s
552     `ArgOrder`, `OptDescr`, and `ArgDescr`.
553
554   * A zero-width unboxed poly-kinded `Proxy#` was added to
555     `GHC.Prim`. It can be used to make it so that there is no the
556     operational overhead for passing around proxy arguments to model
557     type application.
558
559   * New `Data.Proxy` module providing a concrete, poly-kinded proxy type.
560
561   * New `Data.Coerce` module which exports the new `Coercible` class
562     together with the `coerce` primitive which provide safe coercion
563     (wrt role checking) between types with same representation.
564
565   * `Control.Concurrent.MVar` has a new implementation of `readMVar`,
566     which fixes a long-standing bug where `readMVar` is only atomic if
567     there are no other threads running `putMVar`.  `readMVar` now is
568     atomic, and is guaranteed to return the value from the first
569     `putMVar`.  There is also a new `tryReadMVar` which is a
570     non-blocking version.
571
572   * New `Control.Concurrent.MVar.withMVarMasked` which executes
573     `IO` action with asynchronous exceptions masked in the same style
574     as the existing `modifyMVarMasked` and `modifyMVarMasked_`.
575
576   * New `threadWait{Read,Write}STM :: Fd -> IO (STM (), IO ())`
577     functions added to `Control.Concurrent` for waiting on FD
578     readiness with STM actions.
579
580   * Expose `Data.Fixed.Fixed`'s constructor.
581
582   * There are now byte endian-swapping primitives
583     `byteSwap{16,32,64}` available in `Data.Word`, which use
584     optimized machine instructions when available.
585
586   * `Data.Bool` now exports `bool :: a -> a -> Bool -> a`, analogously
587     to `maybe` and `either` in their respective modules.
588
589   * `Data.Either` now exports `isLeft, isRight :: Either a b -> Bool`.
590
591   * `Debug.Trace` now exports `traceId`, `traceShowId`, `traceM`,
592     and `traceShowM`.
593
594   * `Data.Functor` now exports `($>)` and `void`.
595
596   * Rewrote portions of `Text.Printf`, and made changes to `Numeric`
597     (added `Numeric.showFFloatAlt` and `Numeric.showGFloatAlt`) and
598     `GHC.Float` (added `formatRealFloatAlt`) to support it.  The
599     rewritten version is extensible to user types, adds a "generic"
600     format specifier "`%v`", extends the `printf` spec to support much
601     of C's `printf(3)` functionality, and fixes the spurious warnings
602     about using `Text.Printf.printf` at `(IO a)` while ignoring the
603     return value.  These changes were contributed by Bart Massey.
604
605   * The minimal complete definitions for all type-classes with cyclic
606     default implementations have been explicitly annotated with the
607     new `{-# MINIMAL #-}` pragma.
608
609   * `Control.Applicative.WrappedMonad`, which can be used to convert a
610     `Monad` to an `Applicative`, has now a
611     `Monad m => Monad (WrappedMonad m)` instance.
612
613   * There is now a `Generic` and a `Generic1` instance for `WrappedMonad`
614     and `WrappedArrow`.
615
616   * Handle `ExitFailure (-sig)` on Unix by killing process with signal `sig`.
617
618   * New module `Data.Type.Bool` providing operations on type-level booleans.
619
620   * Expose `System.Mem.performMinorGC` for triggering minor GCs.
621
622   * New `System.Environment.{set,unset}Env` for manipulating
623     environment variables.
624
625   * Add `Typeable` instance for `(->)` and `RealWorld`.
626
627   * Declare CPP header `<Typeable.h>` officially obsolete as GHC 7.8+
628     does not support hand-written `Typeable` instances anymore.
629
630   * Remove (unmaintained) Hugs98 and NHC98 specific code.
631
632   * Optimize `System.Timeout.timeout` for the threaded RTS.
633
634   * Remove deprecated functions `unsafeInterleaveST`, `unsafeIOToST`,
635     and `unsafeSTToIO` from `Control.Monad.ST`.
636
637   * Add a new superclass `SomeAsyncException` for all asynchronous exceptions
638     and makes the existing `AsyncException` and `Timeout` exception children
639     of `SomeAsyncException` in the hierarchy.
640
641   * Remove deprecated functions `blocked`, `unblock`, and `block` from
642     `Control.Exception`.
643
644   * Remove deprecated function `forkIOUnmasked` from `Control.Concurrent`.
645
646   * Remove deprecated function `unsafePerformIO` export from `Foreign`
647     (still available via `System.IO.Unsafe.unsafePerformIO`).
648
649   * Various fixes and other improvements (see Git history for full details).