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