Added missing instances for Identity and Const (#11210)
[ghc.git] / libraries / base / changelog.md
1 # Changelog for [`base` package](http://hackage.haskell.org/package/base)
2
3 ## 4.9.0.0  *TBA*
4
5   * Bundled with GHC 8.0
6
7   * The restore operation provided by `mask` and `uninterruptibleMask` now
8     restores the previous masking state whatever the current masking state is.
9
10   * `Alt`, `Dual`, `First`, `Last`, `Product`, and `Sum` now have `Data`,
11     `MonadZip`, and `MonadFix` instances
12
13   * `Maybe` now has a `MonadZip` instance
14
15   * `All` and `Any` now have `Data` instances
16
17   * `Dual`, `First`, `Last`, `Product`, and `Sum` now have `Foldable` and
18     `Traversable` instances
19
20   * `Dual`, `Product`, and `Sum` now have `Functor`, `Applicative`, and
21     `Monad` instances
22
23   * `(,) a` now has a `Monad` instance
24
25   * `ZipList` now has `Foldable` and `Traversable` instances
26
27   * `Identity` now has `Semigroup` and `Monoid` instances
28
29   * `Identity` and `Const` now have `Bounded`, `Enum` and `Ix` instances
30
31   * `Identity` and `Const` now have `Storable` instances
32
33   * `()` now has a `Storable` instance
34
35   * Redundant typeclass constraints have been removed:
36      - `Data.Ratio.{denominator,numerator}` have no `Integral` constraint anymore
37      - **TODO**
38
39   * New `GHC.Generics.packageName` operation
40
41   * New `GHC.Stack.CallStack` data type
42
43   * `Complex` now has `Generic`, `Generic1`, `Functor`, `Foldable`, `Traversable`,
44     `Applicative`, and `Monad` instances
45
46   * `System.Exit.ExitCode` now has a `Generic` instance
47
48   * `Data.Version.Version` now has a `Generic` instance
49
50   * `IO` now has a `Monoid` instance
51
52   * Generalize `Debug.Trace.{traceM, traceShowM}` from `Monad` to `Applicative`
53     (#10023)
54
55   * Generalise `forever` from `Monad` to `Applicative`
56
57   * Generalize `filterM`, `mapAndUnzipM`, `zipWithM`, `zipWithM_`, `replicateM`,
58     `replicateM` from `Monad` to `Applicative` (#10168)
59
60   * Exported `GiveGCStats`, `DoCostCentres`, `DoHeapProfile`, `DoTrace`,
61     `RtsTime`, and `RtsNat` from `GHC.RTS.Flags`
62
63   * New function `GHC.IO.interruptible` used to correctly implement
64     `Control.Exception.allowInterrupt` (#9516)
65
66   * Made `PatternMatchFail`, `RecSelError`, `RecConError`, `RecUpdError`,
67     `NoMethodError`, and `AssertionFailed` newtypes (#10738)
68
69   * New module `Control.Monad.IO.Class` (previously provided by `transformers`
70     package). (#10773)
71
72   * New modules `Data.Functor.Classes`, `Data.Functor.Compose`,
73     `Data.Functor.Product`, and `Data.Functor.Sum` (previously provided by
74     `transformers` package). (#11135)
75
76   * New module `Control.Monad.Fail` providing new `MonadFail(fail)`
77     class (#10751)
78
79   * The `Generic` instance for `Proxy` is now poly-kinded (#10775)
80
81   * add `Data.List.NonEmpty` and `Data.Semigroup` (to become
82     super-class of `Monoid` in the future). These modules were
83     provided by the `semigroups` package previously. (#10365)
84
85   * Add `selSourceUnpackedness`, `selSourceStrictness`, and
86     `selDecidedStrictness`, three functions which look up strictness
87     information of a field in a data constructor, to the `Selector` type class
88     in `GHC.Generics` (#10716)
89
90   * Add `URec`, `UAddr`, `UChar`, `UDouble`, `UFloat`, `UInt`, and `UWord` to
91     `GHC.Generics` as part of making GHC generics capable of handling
92     unlifted types (#10868)
93
94   * Keep `shift{L,R}` on `Integer` with negative shift-arguments from
95     segfaulting (#10571)
96
97   * Add `forkOSWithUnmask` to `Control.Concurrent`, which is like
98     `forkIOWithUnmask`, but the child is run in a bound thread.
99
100   * The `MINIMAL` definition of `Arrow` is now `arr AND (first OR (***))`.
101
102   * The `MINIMAL` definition of `ArrowChoice` is now `left OR (+++)`.
103
104   * Add `MonadPlus IO` and `Alternative IO` instances
105     (previously orphans in `transformers`) (#10755)
106
107   * Add `GHC.TypeLits.TypeError` and `ErrorMessage` to allow users
108     to define custom compile-time error messages.
109
110   * Redesign `GHC.Generics` to use type-level literals to represent the
111     metadata of generic representation types (#9766)
112
113   * The `IsString` instance for `[Char]` has been modified to eliminate
114     ambiguity arising from overloaded strings and functions like `(++)`.
115
116   * Move `Const` from `Control.Applicative` to its own module in
117    `Data.Functor.Const`. (#11135)
118
119   * Enable `PolyKinds` in the `Data.Functor.Const` module to give `Const`
120     the kind `* -> k -> *`. (#10039)
121
122   * Re-export `Const` from `Control.Applicative` for backwards compatibility.
123
124   * Expand `Floating` class to include operations that allow for better
125     precision: `log1p`, `expm1`, `log1pexp` and `log1mexp`. These are not
126     available from `Prelude`, but the full class is exported from `Numeric`.
127
128 ## 4.8.2.0  *Oct 2015*
129
130   * Bundled with GHC 7.10.3
131
132   * The restore operation provided by `mask` and `uninterruptibleMask` now
133     restores the previous masking state whatever the current masking state is.
134
135   * Exported `GiveGCStats`, `DoCostCentres`, `DoHeapProfile`, `DoTrace`,
136     `RtsTime`, and `RtsNat` from `GHC.RTS.Flags`
137
138 ## 4.8.1.0  *Jul 2015*
139
140   * Bundled with GHC 7.10.2
141
142   * `Lifetime` is now exported from `GHC.Event`
143
144   * Implicit-parameter based source location support exposed in `GHC.SrcLoc` and `GHC.Stack`.
145     See GHC User's Manual for more information.
146
147 ## 4.8.0.0  *Mar 2015*
148
149   * Bundled with GHC 7.10.1
150
151   * Make `Applicative` a superclass of `Monad`
152
153   * Add reverse application operator `Data.Function.(&)`
154
155   * Add `Data.List.sortOn` sorting function
156
157   * Add `System.Exit.die`
158
159   * Deprecate `versionTags` field of `Data.Version.Version`.
160     Add `makeVersion :: [Int] -> Version` constructor function to aid
161     migration to a future `versionTags`-less `Version`.
162
163   * Add `IsList Version` instance
164
165   * Weaken RealFloat constraints on some `Data.Complex` functions
166
167   * Add `Control.Monad.(<$!>)` as a strict version of `(<$>)`
168
169   * The `Data.Monoid` module now has the `PolyKinds` extension
170     enabled, so that the `Monoid` instance for `Proxy` are polykinded
171     like `Proxy` itself is.
172
173   * Make `abs` and `signum` handle (-0.0) correctly per IEEE-754.
174
175   * Re-export `Data.Word.Word` from `Prelude`
176
177   * Add `countLeadingZeros` and `countTrailingZeros` methods to
178     `Data.Bits.FiniteBits` class
179
180   * Add `Data.List.uncons` list destructor (#9550)
181
182   * Export `Monoid(..)` from `Prelude`
183
184   * Export `Foldable(..)` from `Prelude`
185     (hiding `fold`, `foldl'`, `foldr'`, and `toList`)
186
187   * Export `Traversable(..)` from `Prelude`
188
189   * Set fixity for `Data.Foldable.{elem,notElem}` to match the
190     conventional one set for `Data.List.{elem,notElem}` (#9610)
191
192   * Turn `toList`, `elem`, `sum`, `product`, `maximum`, and `minimum`
193     into `Foldable` methods (#9621)
194
195   * Replace the `Data.List`-exported functions
196
197     ```
198     all, and, any, concat, concatMap, elem, find, product, sum,
199     mapAccumL, mapAccumR
200     ```
201
202     by re-exports of their generalised `Data.Foldable`/`Data.Traversable`
203     counterparts.  In other words, unqualified imports of `Data.List`
204     and `Data.Foldable`/`Data.Traversable` no longer lead to conflicting
205     definitions. (#9586)
206
207   * New (unofficial) module `GHC.OldList` containing only list-specialised
208     versions of the functions from `Data.List` (in other words, `GHC.OldList`
209     corresponds to `base-4.7.0.2`'s `Data.List`)
210
211   * Replace the `Control.Monad`-exported functions
212
213     ```
214     sequence_, msum, mapM_, forM_,
215     forM, mapM, sequence
216     ```
217
218     by re-exports of their generalised `Data.Foldable`/`Data.Traversable`
219     counterparts.  In other words, unqualified imports of `Control.Monad`
220     and `Data.Foldable`/`Data.Traversable` no longer lead to conflicting
221     definitions. (#9586)
222
223   * Generalise `Control.Monad.{when,unless,guard}` from `Monad` to
224     `Applicative` and from `MonadPlus` to `Alternative` respectively.
225
226   * Generalise `Control.Monad.{foldM,foldM_}` to `Foldable`
227
228   * `scanr`, `mapAccumL` and `filterM` now take part in list fusion (#9355,
229     #9502, #9546)
230
231   * Remove deprecated `Data.OldTypeable` (#9639)
232
233   * New module `Data.Bifunctor` providing the `Bifunctor(bimap,first,second)`
234     class (previously defined in `bifunctors` package) (#9682)
235
236   * New module `Data.Void` providing the canonical uninhabited type `Void`
237     (previously defined in `void` package) (#9814)
238
239   * Update Unicode class definitions to Unicode version 7.0
240
241   * Add `Alt`, an `Alternative` wrapper, to `Data.Monoid`. (#9759)
242
243   * Add `isSubsequenceOf` to `Data.List` (#9767)
244
245   * The arguments to `==` and `eq` in `Data.List.nub` and `Data.List.nubBy`
246     are swapped, such that `Data.List.nubBy (<) [1,2]` now returns `[1]`
247     instead of `[1,2]` (#2528, #3280, #7913)
248
249   * New module `Data.Functor.Identity` (previously provided by `transformers`
250     package). (#9664)
251
252   * Add `scanl'`, a strictly accumulating version of `scanl`, to `Data.List`
253     and `Data.OldList`. (#9368)
254
255   * Add `fillBytes` to `Foreign.Marshal.Utils`.
256
257   * Add new `displayException` method to `Exception` typeclass. (#9822)
258
259   * Add `Data.Bits.toIntegralSized`, a size-checked version of
260     `fromIntegral`. (#9816)
261
262   * New module `Numeric.Natural` providing new `Natural` type
263     representing non-negative arbitrary-precision integers.  The `GHC.Natural`
264     module exposes additional GHC-specific primitives. (#9818)
265
266   * Add `(Storable a, Integeral a) => Storable (Ratio a)` instance (#9826)
267
268   * Add `Storable a => Storable (Complex a)` instance (#9826)
269
270   * New module `GHC.RTS.Flags` that provides accessors to runtime flags.
271
272   * Expose functions for per-thread allocation counters and limits in `GHC.Conc`
273
274         disableAllocationLimit :: IO ()
275         enableAllocationLimit :: IO ()
276         getAllocationCounter :: IO Int64
277         setAllocationCounter :: Int64 -> IO ()
278
279     together with a new exception `AllocationLimitExceeded`.
280
281   * Make `read . show = id` for `Data.Fixed` (#9240)
282
283   * Add `calloc` and `callocBytes` to `Foreign.Marshal.Alloc`. (#9859)
284
285   * Add `callocArray` and `callocArray0` to `Foreign.Marshal.Array`. (#9859)
286
287   * Restore invariant in `Data (Ratio a)` instance (#10011)
288
289   * Add/expose `rnfTypeRep`, `rnfTyCon`, `typeRepFingerprint`, and
290     `tyConFingerprint` helpers to `Data.Typeable`.
291
292   * Define proper `MINIMAL` pragma for `class Ix`. (#10142)
293
294 ## 4.7.0.2  *Dec 2014*
295
296   * Bundled with GHC 7.8.4
297
298   * Fix performance bug in `Data.List.inits` (#9345)
299
300   * Fix handling of null bytes in `Debug.Trace.trace` (#9395)
301
302 ## 4.7.0.1  *Jul 2014*
303
304   * Bundled with GHC 7.8.3
305
306   * Unhide `Foreign.ForeignPtr` in Haddock (#8475)
307
308   * Fix recomputation of `TypeRep` in `Typeable` type-application instance
309     (#9203)
310
311   * Fix regression in Data.Fixed Read instance (#9231)
312
313   * Fix `fdReady` to honor `FD_SETSIZE` (#9168)
314
315 ## 4.7.0.0  *Apr 2014*
316
317   * Bundled with GHC 7.8.1
318
319   * Add `/Since: 4.[4567].0.0/` Haddock annotations to entities
320     denoting the package version, when the given entity was introduced
321     (or its type signature changed in a non-compatible way)
322
323   * The `Control.Category` module now has the `PolyKinds` extension
324     enabled, meaning that instances of `Category` no longer need be of
325     kind `* -> * -> *`.
326
327   * There are now `Foldable` and `Traversable` instances for `Either a`,
328    `Const r`, and `(,) a`.
329
330   * There are now `Show`, `Read`, `Eq`, `Ord`, `Monoid`, `Generic`, and
331     `Generic1` instances for `Const`.
332
333   * There is now a `Data` instance for `Data.Version`.
334
335   * A new `Data.Bits.FiniteBits` class has been added to represent
336     types with fixed bit-count. The existing `Bits` class is extended
337     with a `bitSizeMaybe` method to replace the now obsolete
338     `bitsize` method.
339
340   * `Data.Bits.Bits` gained a new `zeroBits` method which completes the
341     `Bits` API with a direct way to introduce a value with all bits cleared.
342
343   * There are now `Bits` and `FiniteBits` instances for `Bool`.
344
345   * There are now `Eq`, `Ord`, `Show`, `Read`, `Generic`. and `Generic1`
346     instances for `ZipList`.
347
348   * There are now `Eq`, `Ord`, `Show` and `Read` instances for `Down`.
349
350   * There are now `Eq`, `Ord`, `Show`, `Read` and `Generic` instances
351     for types in GHC.Generics (`U1`, `Par1`, `Rec1`, `K1`, `M1`,
352     `(:+:)`, `(:*:)`, `(:.:)`).
353
354   * `Data.Monoid`: There are now `Generic` instances for `Dual`, `Endo`,
355     `All`, `Any`, `Sum`, `Product`, `First`, and `Last`; as well as
356     `Generic1` instances for `Dual`, `Sum`, `Product`, `First`, and `Last`.
357
358   * The `Data.Monoid.{Product,Sum}` newtype wrappers now have `Num` instances.
359
360   * There are now `Functor` instances for `System.Console.GetOpt`'s
361     `ArgOrder`, `OptDescr`, and `ArgDescr`.
362
363   * A zero-width unboxed poly-kinded `Proxy#` was added to
364     `GHC.Prim`. It can be used to make it so that there is no the
365     operational overhead for passing around proxy arguments to model
366     type application.
367
368   * New `Data.Proxy` module providing a concrete, poly-kinded proxy type.
369
370   * New `Data.Coerce` module which exports the new `Coercible` class
371     together with the `coerce` primitive which provide safe coercion
372     (wrt role checking) between types with same representation.
373
374   * `Control.Concurrent.MVar` has a new implementation of `readMVar`,
375     which fixes a long-standing bug where `readMVar` is only atomic if
376     there are no other threads running `putMVar`.  `readMVar` now is
377     atomic, and is guaranteed to return the value from the first
378     `putMVar`.  There is also a new `tryReadMVar` which is a
379     non-blocking version.
380
381   * New `Control.Concurrent.MVar.withMVarMasked` which executes
382     `IO` action with asynchronous exceptions masked in the same style
383     as the existing `modifyMVarMasked` and `modifyMVarMasked_`.
384
385   * New `threadWait{Read,Write}STM :: Fd -> IO (STM (), IO ())`
386     functions added to `Control.Concurrent` for waiting on FD
387     readiness with STM actions.
388
389   * Expose `Data.Fixed.Fixed`'s constructor.
390
391   * There are now byte endian-swapping primitives
392     `byteSwap{16,32,64}` available in `Data.Word`, which use
393     optimized machine instructions when available.
394
395   * `Data.Bool` now exports `bool :: a -> a -> Bool -> a`, analogously
396     to `maybe` and `either` in their respective modules.
397
398   * `Data.Either` now exports `isLeft, isRight :: Either a b -> Bool`.
399
400   * `Debug.Trace` now exports `traceId`, `traceShowId`, `traceM`,
401     and `traceShowM`.
402
403   * `Data.Functor` now exports `($>)` and `void`.
404
405   * Rewrote portions of `Text.Printf`, and made changes to `Numeric`
406     (added `Numeric.showFFloatAlt` and `Numeric.showGFloatAlt`) and
407     `GHC.Float` (added `formatRealFloatAlt`) to support it.  The
408     rewritten version is extensible to user types, adds a "generic"
409     format specifier "`%v`", extends the `printf` spec to support much
410     of C's `printf(3)` functionality, and fixes the spurious warnings
411     about using `Text.Printf.printf` at `(IO a)` while ignoring the
412     return value.  These changes were contributed by Bart Massey.
413
414   * The minimal complete definitions for all type-classes with cyclic
415     default implementations have been explicitly annotated with the
416     new `{-# MINIMAL #-}` pragma.
417
418   * `Control.Applicative.WrappedMonad`, which can be used to convert a
419     `Monad` to an `Applicative`, has now a
420     `Monad m => Monad (WrappedMonad m)` instance.
421
422   * There is now a `Generic` and a `Generic1` instance for `WrappedMonad`
423     and `WrappedArrow`.
424
425   * Handle `ExitFailure (-sig)` on Unix by killing process with signal `sig`.
426
427   * New module `Data.Type.Bool` providing operations on type-level booleans.
428
429   * Expose `System.Mem.performMinorGC` for triggering minor GCs.
430
431   * New `System.Environment.{set,unset}Env` for manipulating
432     environment variables.
433
434   * Add `Typeable` instance for `(->)` and `RealWorld`.
435
436   * Declare CPP header `<Typeable.h>` officially obsolete as GHC 7.8+
437     does not support hand-written `Typeable` instances anymore.
438
439   * Remove (unmaintained) Hugs98 and NHC98 specific code.
440
441   * Optimize `System.Timeout.timeout` for the threaded RTS.
442
443   * Remove deprecated functions `unsafeInterleaveST`, `unsafeIOToST`,
444     and `unsafeSTToIO` from `Control.Monad.ST`.
445
446   * Add a new superclass `SomeAsyncException` for all asynchronous exceptions
447     and makes the existing `AsyncException` and `Timeout` exception children
448     of `SomeAsyncException` in the hierarchy.
449
450   * Remove deprecated functions `blocked`, `unblock`, and `block` from
451     `Control.Exception`.
452
453   * Remove deprecated function `forkIOUnmasked` from `Control.Concurrent`.
454
455   * Remove deprecated function `unsafePerformIO` export from `Foreign`
456     (still available via `System.IO.Unsafe.unsafePerformIO`).
457
458   * Various fixes and other improvements (see Git history for full details).