Changelog for Extra
1.7.14, released 2023-07-01
    #106, add compatibility with GHC 9.7
    #103, future-proof against addition of Data.List.unsnoc
1.7.13, released 2023-04-22
    #102, add mwhen :: Monoid a => Bool -> a -> a
    #99, make replace with an empty from intersperse the replacement
    #101, future-proof against addition of Data.List.!?
1.7.12, released 2022-09-02
    #98, make both lazy in its argument
    #98, make first3,second3,third3 lazy in their argument
    #98, make firstM,secondM lazy in their argument
    #86, add notNull for Foldable
1.7.11, released 2022-08-21
    #95, add List.repeatedlyNE and NonEmpty.repeatedly
    #94, add groupOnKey
    #91, add foldl1' to NonEmpty
1.7.10, released 2021-08-29
    #81, add assertIO function
    #85, add !? to do !! list indexing returning a Maybe
    #80, add strict Var functions modifyVar', modifyVar_', writeVar'
1.7.9, released 2020-12-19
    #72, add pureIf
    #73, make takeEnd, dropEnd, splitAtEnd: return immediately if i <= 0
    #71, add compareLength and comparingLength
1.7.8, released 2020-09-12
    #68, make sure Data.Foldable.Extra is exposed
1.7.7, released 2020-08-25
    #67, defer to System.IO readFile', hGetContents' in GHC 9.0
1.7.6, released 2020-08-21
    #66, add lots of functions to Data.Foldable.Extra (anyM etc)
1.7.5, released 2020-08-12
    #65, add Data.Foldable.Extra
    #65, add sum', product', sumOn' and productOn'
1.7.4, released 2020-07-15
    #59, add whileJustM and untilJustM
    #61, optimise nubOrd (10% or so)
    Add first3, second3, third3
1.7.3, released 2020-05-30
    #58, add disjointOrd and disjointOrdBy
1.7.2, released 2020-05-25
    #56, add zipWithLongest
    #57, make duration in MonadIO
    Simplify and optimise Barrier
    Mark modules that are empty as DEPRECATED
    Remove support for GHC 7.10
1.7.1, released 2020-03-10
    Add NOINLINE to errorIO to work around a GHC 8.4 bug
1.7, released 2020-03-05
*   #40, delete deprecated function for
*   zipFrom now truncates lists, rather than error, just like zip
1.6.21, released 2020-03-02
    #54, deprecate nubOn since its O(n^2). Use nubOrdOn
    #53, add some nub functions to NonEmpty
1.6.20, released 2020-02-16
    Add firstM, secondM
1.6.19, released 2020-02-11
    #50, add headDef, lastDef, and dropEnd1
1.6.18, released 2019-08-21
    Make errorIO include a call stack
    Make maximumOn and minimumOn apply the function once per element
1.6.17, released 2019-05-31
    Add enumerate
1.6.16, released 2019-05-25
    Add atomicModifyIORef_ and atomicModifyIORef'_
1.6.15, released 2019-04-22
    #45, add NonEmpty.Extra for extra appending functions
    #42, add fromMaybeM
    Remove support for GHC 7.4, 7.6 and 7.8
1.6.14, released 2018-12-10
    Add mapLeft and mapRight
1.6.13, released 2018-10-14
    #40, deprecate Data.List.Extra.for (clashes with Traversable)
1.6.12, released 2018-09-24
    #39, add curry3/uncurry3
1.6.11, released 2018-09-18
    #38, make escapeHTML replace ' with '
1.6.10, released 2018-09-04
    #37, make a duration/sleep test more robust (wider bounds)
1.6.9, released 2018-07-12
    Add loop, the non-monadic version of loopM
    #36, add whenMaybe and whenMaybeM
1.6.8, released 2018-05-24
    Add notNull
    Add listDirectories
1.6.7, released 2018-05-23
    #35, add fold1M and fold1M_
    #34, lots of documentation typos
1.6.6, released 2018-04-16
    Add escapeJSON and unescapeJSON
    Add escapeHTML and unescapeHTML
1.6.5, released 2018-03-24
    #33, improve error messages on test suite failures
1.6.4, released 2018-02-23
    Add dropPrefix and dropSuffix
1.6.3, released 2018-01-26
    Add maximumOn and minimumOn
    #31, add nubSort, nubSortBy and nubSortOn
1.6.2, released 2017-12-07
    Mark the partial functions with Partial
    Add Partial constraint
1.6.1, released 2017-11-30
    Add newTempFileWithin and newTempDirWithin
    Mark the Extra module as deprecated, used for documentation only
1.6, released 2017-06-16
    #23, delete subtractTime
    Require QuickCheck-2.10
1.5.3, released 2017-06-12
    Add readMaybe, readEither
1.5.2, released 2017-04-04
    Add errorWithoutStackTrace to Control.Exception.Extra
1.5.1, released 2016-10-25
    #25, add zipFrom and zipWithFrom
    #24, add eitherToMaybe and maybeToEither
    Add fromLeft' and fromRight'
1.5, released 2016-07-21
    Change fromLeft/fromRight signatures to follow the base libraries
1.4.12, released 2016-07-18
    Add writeVar
1.4.11, released 2016-07-15
    Require QuickCheck 2.9
    #23, deprecate offsetTimeIncrease and subtract
    #22, improve offsetTime to give reliable measurements
    Depend on the clock library
1.4.10, released 2016-06-15
    Add Data.Typeable.Extra containing typeRep, Proxy, (:~:)
1.4.9, released 2016-06-01
    Add line1
1.4.8, released 2016-05-26
    Add displayException
1.4.7, released 2016-05-22
    #21, add concatForM
1.4.6, released 2016-05-11
    #11, add maybeM and eitherM
1.4.5, released 2016-04-29
    #17, change fileEq on files that do not exist to be an error
1.4.4, released 2016-04-29
    #14, add mconcatMap and mconcatMapM
    #16, add fileEq
    #15, add isMac
1.4.3, released 2016-01-07
    Add Data.Version.Extra
1.4.2, released 2015-09-14
    Make concatMapM/mapMaybeM faster
1.4.1, released 2015-08-04
    Make temp file functions workaround GHC bug #10731
    Add retryBool
1.4, released 2015-07-23
    Add stripInfix and stripInfixEnd
1.3.1, released 2015-07-17
    #9, support directory-1.2.3
1.3, released 2015-06-20
    Add whenJustM
    Add errorIO
1.2, released 2015-05-18
    Add onceFork
    Make once async exception safe
    Fix a deadlock in once when two people request in parallel
    Fix a missing hClose in captureOutput
1.1, released 2015-02-17
    #7, add nubOrd, nubOrdOn, nubOrdBy
    #6, add groupSortOn and groupSortBy
    #5, add splitAtEnd
1.0.1, released 2015-01-09
    Make listFilesAvoid drop trailing path separators before testing
    #3, add a constraint base >= 4.4
1.0, released 2014-11-27
    No changes
0.8, released 2014-11-12
    Fix a bug in writeFileEncoding/writeFileUTF8
0.7, released 2014-11-03
    Fix for missing case in withNumCapabilities
0.6, released 2014-10-31
    Ensure barrier is thread-safe
    Make subsequent signalBarrier calls throw an exception
    Add timeout function
    Make sure sleep never wraps round an Int
0.5.1, released 2014-10-28
    Use uncons from GHC 7.9 and above
0.5, released 2014-10-28
    Use the sortOn from GHC 7.9 and above
    Remove getProcessorCount
    Remove getDirectoryContentsRecursive in favour of listFilesRecursive
    Change the signature for newTempFile/newTempDir
    Add a once function
0.4, released 2014-10-23
    Remove all but the extractors on triples
    Remove groupSortOn
    Remove dropAround
0.3.2, released 2014-10-21
    Remove use of ===, allows older QuickCheck versions
0.3.1, released 2014-10-20
    Fix a bug in breakEnd/spanEnd
0.3, released 2014-10-18
    Rename showTime to showDuration
    Add stringException
    Eliminate rep/reps, use replace instead
    Switch distinct for allSame/anySame
    Optimise the numeric conversions
    Rename chop to repeatedly
    Add whenM/unlessM
    Redo the Tuple module, additions and deletions
    Add newTempFile, newTempDir
    Add createDirectoryPrivate
    Rename strip* to trim*
    Generalise showException
0.2, released 2014-10-07
    Redo the cons/uncons functions
    Add withTempDir
    Rename withTemporaryFile to withTempFile
    Change trim to strip (follow text naming convention)
    Ensure operators get exported
0.1, released 2014-10-06
    Initial version, still unstable