Hello community,

here is the log from the commit of package ghc-extra for openSUSE:Factory 
checked in at 2019-04-28 20:12:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-extra (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-extra.new.5536 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-extra"

Sun Apr 28 20:12:35 2019 rev:20 rq:698549 version:1.6.15

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-extra/ghc-extra.changes      2018-12-21 
08:21:26.117569095 +0100
+++ /work/SRC/openSUSE:Factory/.ghc-extra.new.5536/ghc-extra.changes    
2019-04-28 20:12:47.294443281 +0200
@@ -1,0 +2,9 @@
+Tue Apr 23 02:01:56 UTC 2019 - [email protected]
+
+- Update extra to version 1.6.15.
+  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
+
+-------------------------------------------------------------------

Old:
----
  extra-1.6.14.tar.gz

New:
----
  extra-1.6.15.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-extra.spec ++++++
--- /var/tmp/diff_new_pack.IJzstb/_old  2019-04-28 20:12:48.286442665 +0200
+++ /var/tmp/diff_new_pack.IJzstb/_new  2019-04-28 20:12:48.286442665 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package ghc-extra
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
 %global pkg_name extra
 %bcond_with tests
 Name:           ghc-%{pkg_name}
-Version:        1.6.14
+Version:        1.6.15
 Release:        0
 Summary:        Extra functions I use
 License:        BSD-3-Clause
@@ -32,6 +32,7 @@
 BuildRequires:  ghc-filepath-devel
 BuildRequires:  ghc-process-devel
 BuildRequires:  ghc-rpm-macros
+BuildRequires:  ghc-semigroups-devel
 BuildRequires:  ghc-time-devel
 BuildRequires:  ghc-unix-devel
 %if %{with tests}

++++++ extra-1.6.14.tar.gz -> extra-1.6.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/CHANGES.txt new/extra-1.6.15/CHANGES.txt
--- old/extra-1.6.14/CHANGES.txt        2018-12-10 20:24:13.000000000 +0100
+++ new/extra-1.6.15/CHANGES.txt        2019-04-22 20:26:14.000000000 +0200
@@ -1,5 +1,9 @@
 Changelog for Extra
 
+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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/Generate.hs new/extra-1.6.15/Generate.hs
--- old/extra-1.6.14/Generate.hs        2017-11-24 12:54:00.000000000 +0100
+++ new/extra-1.6.15/Generate.hs        2019-04-22 20:25:59.000000000 +0200
@@ -37,11 +37,11 @@
         ,"module Extra {-# DEPRECATED \"This module is provided as 
documentation of all new functions, you should import the more specific modules 
directly.\" #-} ("] ++
         concat [ ["    -- * " ++ mod
                  ,"    -- | Extra functions available in @" ++ show mod ++ "@."
-                 ,"    " ++ unwords (map (++",") funs)]
-               | (mod,funs,_) <- ifaces] ++
+                 ,"    " ++ unwords (map (++",") $ filter (notHidden mod) 
funs)]
+               | (mod,funs@(_:_),_) <- ifaces] ++
         ["    ) where"
         ,""] ++
-        ["import " ++ x | x <- mods]
+        ["import " ++ addHiding mod | (mod,_:_,_) <- ifaces]
     writeFileBinaryChanged "test/TestGen.hs" $ unlines $
         ["-- GENERATED CODE - DO NOT MODIFY"
         ,"-- See Generate.hs for details of how to generate"
@@ -66,6 +66,17 @@
     when (Just x /= old) $
         writeFileBinary file x
 
+hidden :: String -> [String]
+hidden "Data.List.NonEmpty.Extra" = ["cons", "snoc", "sortOn", "union", 
"unionBy"]
+hidden _ = []
+
+notHidden :: String -> String -> Bool
+notHidden mod fun = fun `notElem` hidden mod
+
+addHiding :: String -> String
+addHiding mod
+  | xs@(_:_) <- hidden mod = mod ++ " hiding (" ++ intercalate ", " xs ++ ")"
+  | otherwise = mod
 
 validIdentifier xs =
     (take 1 xs == "(" || isName (takeWhile (/= '(') xs)) &&
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/LICENSE new/extra-1.6.15/LICENSE
--- old/extra-1.6.14/LICENSE    2018-01-21 17:16:40.000000000 +0100
+++ new/extra-1.6.15/LICENSE    2019-02-25 16:47:08.000000000 +0100
@@ -1,4 +1,4 @@
-Copyright Neil Mitchell 2014-2018.
+Copyright Neil Mitchell 2014-2019.
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/README.md new/extra-1.6.15/README.md
--- old/extra-1.6.14/README.md  2018-05-21 20:30:10.000000000 +0200
+++ new/extra-1.6.15/README.md  2019-04-22 20:25:59.000000000 +0200
@@ -1,11 +1,11 @@
-# Extra [![Hackage 
version](https://img.shields.io/hackage/v/extra.svg?label=Hackage)](https://hackage.haskell.org/package/extra)
 [![Stackage 
version](https://www.stackage.org/package/extra/badge/nightly?label=Stackage)](https://www.stackage.org/package/extra)
 [![Linux Build 
Status](https://img.shields.io/travis/ndmitchell/extra/master.svg?label=Linux%20build)](https://travis-ci.org/ndmitchell/extra)
 [![Windows Build 
Status](https://img.shields.io/appveyor/ci/ndmitchell/extra/master.svg?label=Windows%20build)](https://ci.appveyor.com/project/ndmitchell/extra)
+# Extra [![Hackage 
version](https://img.shields.io/hackage/v/extra.svg?label=Hackage)](https://hackage.haskell.org/package/extra)
 [![Stackage 
version](https://www.stackage.org/package/extra/badge/nightly?label=Stackage)](https://www.stackage.org/package/extra)
 [![Linux build 
status](https://img.shields.io/travis/ndmitchell/extra/master.svg?label=Linux%20build)](https://travis-ci.org/ndmitchell/extra)
 [![Windows build 
status](https://img.shields.io/appveyor/ci/ndmitchell/extra/master.svg?label=Windows%20build)](https://ci.appveyor.com/project/ndmitchell/extra)
 
-A library of extra functions for the standard Haskell libraries. Most 
functions are simple additions, filling out missing functionality. A few 
functions are available in later versions of GHC, but this package makes them 
available back to GHC 7.2. A few examples:
+A library of extra functions for the standard Haskell libraries. Most 
functions are simple additions, filling out missing functionality. A few 
functions are available in later versions of GHC, but this package makes them 
available back to GHC 7.10. A few examples:
 
 * `Control.Monad.Extra.concatMapM` provides a monadic version of `concatMap`, 
in the same way that `mapM` is a monadic version of `map`.
 * `Data.Tuple.Extra.fst3` provides a function to get the first element of a 
triple.
 * `Control.Exception.Extra.retry` provides a function that retries an `IO` 
action a number of times.
-* `System.Environment.Extra.lookupEnv` is a function available in GHC 7.6 and 
above. On GHC 7.6 and above this package reexports the version from 
`System.Environment` while on GHC 7.4 and below it defines an equivalent 
version.
+* `Data.Either.Extra.fromLeft` is a function available in GHC 8.0 and above. 
On GHC 8.0 and above this package reexports the version from `Data.Either` 
while on GHC 7.10 and below it defines an equivalent version.
 
 The module `Extra` documents all functions provided by this library. Modules 
such as `Data.List.Extra` provide extra functions over `Data.List` and also 
reexport `Data.List`. Users are recommended to replace `Data.List` imports with 
`Data.List.Extra` if they need the extra functionality.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/extra.cabal new/extra-1.6.15/extra.cabal
--- old/extra-1.6.14/extra.cabal        2018-12-10 20:24:24.000000000 +0100
+++ new/extra-1.6.15/extra.cabal        2019-04-22 20:32:36.000000000 +0200
@@ -1,13 +1,13 @@
 cabal-version:      >= 1.18
 build-type:         Simple
 name:               extra
-version:            1.6.14
+version:            1.6.15
 license:            BSD3
 license-file:       LICENSE
 category:           Development
 author:             Neil Mitchell <[email protected]>
 maintainer:         Neil Mitchell <[email protected]>
-copyright:          Neil Mitchell 2014-2018
+copyright:          Neil Mitchell 2014-2019
 synopsis:           Extra functions I use.
 description:
     A library of extra functions for the standard Haskell libraries. Most 
functions are simple additions, filling out missing functionality. A few 
functions are available in later versions of GHC, but this package makes them 
available back to GHC 7.2.
@@ -15,7 +15,7 @@
     The module "Extra" documents all functions provided by this library. 
Modules such as "Data.List.Extra" provide extra functions over "Data.List" and 
also reexport "Data.List". Users are recommended to replace "Data.List" imports 
with "Data.List.Extra" if they need the extra functionality.
 homepage:           https://github.com/ndmitchell/extra#readme
 bug-reports:        https://github.com/ndmitchell/extra/issues
-tested-with:        GHC==8.6.3, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, 
GHC==7.10.3, GHC==7.8.4, GHC==7.6.3, GHC==7.4.2
+tested-with:        GHC==8.6.4, GHC==8.4.4, GHC==8.2.2, GHC==8.0.2, GHC==7.10.3
 
 extra-doc-files:
     CHANGES.txt
@@ -31,11 +31,13 @@
     default-language: Haskell2010
     hs-source-dirs: src
     build-depends:
-        base >= 4.4 && < 5,
+        base >= 4.8 && < 5,
         directory,
         filepath,
         process,
         clock >= 0.7,
+        -- For GHC 7.10 since Data.List.NonEmpty wasn't in base then
+        semigroups,
         time
     if !os(windows)
         build-depends: unix
@@ -50,6 +52,7 @@
         Data.Either.Extra
         Data.IORef.Extra
         Data.List.Extra
+        Data.List.NonEmpty.Extra
         Data.Tuple.Extra
         Data.Typeable.Extra
         Data.Version.Extra
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Control/Concurrent/Extra.hs 
new/extra-1.6.15/src/Control/Concurrent/Extra.hs
--- old/extra-1.6.14/src/Control/Concurrent/Extra.hs    2018-12-10 
15:33:37.000000000 +0100
+++ new/extra-1.6.15/src/Control/Concurrent/Extra.hs    2019-02-25 
16:55:33.000000000 +0100
@@ -1,5 +1,4 @@
-{-# LANGUAGE CPP, TupleSections, ConstraintKinds #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE TupleSections, ConstraintKinds #-}
 
 -- | Extra functions for "Control.Concurrent".
 --
@@ -14,8 +13,8 @@
 --   see the <httdp://hackage.haskell.org/package/async async> package.
 module Control.Concurrent.Extra(
     module Control.Concurrent,
-    getNumCapabilities, setNumCapabilities, withNumCapabilities,
-    forkFinally, once, onceFork,
+    withNumCapabilities,
+    once, onceFork,
     -- * Lock
     Lock, newLock, withLock, withLockTry,
     -- * Var
@@ -43,39 +42,6 @@
 withNumCapabilities _ act = act
 
 
-#if __GLASGOW_HASKELL__ < 702
--- | A version of 'getNumCapabilities' that works on all versions of GHC, but 
returns 1 before GHC 7.2.
-getNumCapabilities :: IO Int
-getNumCapabilities = return 1
-#endif
-
-#if __GLASGOW_HASKELL__ < 706
--- | A version of 'setNumCapabilities' that works on all versions of GHC, but 
has no effect before GHC 7.6.
-setNumCapabilities :: Int -> IO ()
-setNumCapabilities n = return ()
-#endif
-
-
-#if __GLASGOW_HASKELL__ < 706
--- | fork a thread and call the supplied function when the thread is about
--- to terminate, with an exception or a returned value.  The function is
--- called with asynchronous exceptions masked.
---
--- @
--- 'forkFinally' action and_then =
---    mask $ \restore ->
---      forkIO $ try (restore action) >>= and_then
--- @
---
--- This function is useful for informing the parent when a child
--- terminates, for example.
-forkFinally :: IO a -> (Either SomeException a -> IO ()) -> IO ThreadId
-forkFinally action and_then =
-  mask $ \restore ->
-    forkIO $ try (restore action) >>= and_then
-#endif
-
-
 -- | Given an action, produce a wrapped action that runs at most once.
 --   If the function raises an exception, the same exception will be reraised 
each time.
 --
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Control/Exception/Extra.hs 
new/extra-1.6.15/src/Control/Exception/Extra.hs
--- old/extra-1.6.14/src/Control/Exception/Extra.hs     2018-12-10 
15:34:38.000000000 +0100
+++ new/extra-1.6.15/src/Control/Exception/Extra.hs     2019-02-25 
16:56:30.000000000 +0100
@@ -13,7 +13,7 @@
     retry, retryBool,
     errorWithoutStackTrace,
     showException, stringException,
-    errorIO, displayException,
+    errorIO,
     -- * Exception catching/ignoring
     ignore,
     catch_, handle_, try_,
@@ -52,13 +52,6 @@
 showException = stringException . show
 
 
-#if __GLASGOW_HASKELL__ < 710
--- | Render this exception value in a human-friendly manner.
---   Part of the 'Exception' class in GHC 7.10 onwards.
-displayException :: Exception e => e -> String
-displayException = show
-#endif
-
 #if __GLASGOW_HASKELL__ < 800
 -- | A variant of 'error' that does not produce a stack trace.
 errorWithoutStackTrace :: String -> a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Control/Monad/Extra.hs 
new/extra-1.6.15/src/Control/Monad/Extra.hs
--- old/extra-1.6.14/src/Control/Monad/Extra.hs 2018-12-07 12:00:34.000000000 
+0100
+++ new/extra-1.6.15/src/Control/Monad/Extra.hs 2019-04-22 20:25:59.000000000 
+0200
@@ -9,7 +9,7 @@
     whenJust, whenJustM,
     whenMaybe, whenMaybeM,
     unit,
-    maybeM, eitherM,
+    maybeM, fromMaybeM, eitherM,
     -- * Loops
     loop, loopM, whileM,
     -- * Lists
@@ -70,6 +70,11 @@
 maybeM n j x = maybe n j =<< x
 
 
+-- | Monadic generalisation of 'fromMaybe'.
+fromMaybeM :: Monad m => m a -> m (Maybe a) -> m a
+fromMaybeM n x = maybe n pure =<< x
+
+
 -- | Monadic generalisation of 'either'.
 eitherM :: Monad m => (a -> m c) -> (b -> m c) -> m (Either a b) -> m c
 eitherM l r x = either l r =<< x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Data/Either/Extra.hs 
new/extra-1.6.15/src/Data/Either/Extra.hs
--- old/extra-1.6.14/src/Data/Either/Extra.hs   2018-12-10 16:20:39.000000000 
+0100
+++ new/extra-1.6.15/src/Data/Either/Extra.hs   2019-02-25 16:58:14.000000000 
+0100
@@ -9,7 +9,7 @@
 --   <https://hackage.haskell.org/package/either either>.
 module Data.Either.Extra(
     module Data.Either,
-    isLeft, isRight, fromLeft, fromRight, fromEither,
+    fromLeft, fromRight, fromEither,
     fromLeft', fromRight',
     eitherToMaybe, maybeToEither,
     mapLeft, mapRight,
@@ -61,18 +61,6 @@
 fromRight' _ = error "fromRight', given a Left"
 
 
-#if __GLASGOW_HASKELL__ < 708
--- | Test if an 'Either' value is the 'Left' constructor.
---   Provided as standard with GHC 7.8 and above.
-isLeft :: Either l r -> Bool
-isLeft Left{} = True; isLeft _ = False
-
--- | Test if an 'Either' value is the 'Right' constructor.
---   Provided as standard with GHC 7.8 and above.
-isRight :: Either l r -> Bool
-isRight Right{} = True; isRight _ = False
-#endif
-
 -- | Pull the value out of an 'Either' where both alternatives
 --   have the same type.
 --
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Data/IORef/Extra.hs 
new/extra-1.6.15/src/Data/IORef/Extra.hs
--- old/extra-1.6.14/src/Data/IORef/Extra.hs    2017-05-09 22:38:47.000000000 
+0200
+++ new/extra-1.6.15/src/Data/IORef/Extra.hs    2019-02-25 16:55:23.000000000 
+0100
@@ -1,11 +1,9 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
 
 -- | This module extends "Data.IORef" with operations forcing the value 
written to the IORef.
 --   Some of these functions are available in later versions of GHC, but not 
all.
 module Data.IORef.Extra(
     module Data.IORef,
-    modifyIORef', writeIORef', atomicModifyIORef', atomicWriteIORef, 
atomicWriteIORef'
+    writeIORef', atomicWriteIORef'
     ) where
 
 import Data.IORef
@@ -23,30 +21,3 @@
 atomicWriteIORef' ref x = do
     evaluate x
     atomicWriteIORef ref x
-
-
-#if __GLASGOW_HASKELL__ < 706
-
--- | Version of 'modifyIORef' that evaluates the function.
-modifyIORef' :: IORef a -> (a -> a) -> IO ()
-modifyIORef' ref f = do
-    x <- readIORef ref
-    writeIORef' ref $ f x
-
--- | Strict version of 'atomicModifyIORef'.  This forces both the value stored
--- in the 'IORef' as well as the value returned.
-atomicModifyIORef' :: IORef a -> (a -> (a,b)) -> IO b
-atomicModifyIORef' ref f = do
-    b <- atomicModifyIORef ref
-            (\x -> let (a, b) = f x
-                    in (a, a `seq` b))
-    b `seq` return b
-
--- | Variant of 'writeIORef' with the \"barrier to reordering\" property that
--- 'atomicModifyIORef' has.
-atomicWriteIORef :: IORef a -> a -> IO ()
-atomicWriteIORef ref a = do
-    x <- atomicModifyIORef ref $ const (a, ())
-    x `seq` return ()
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Data/List/Extra.hs 
new/extra-1.6.15/src/Data/List/Extra.hs
--- old/extra-1.6.14/src/Data/List/Extra.hs     2018-12-07 12:00:54.000000000 
+0100
+++ new/extra-1.6.15/src/Data/List/Extra.hs     2019-02-25 16:59:08.000000000 
+0100
@@ -1,5 +1,4 @@
-{-# LANGUAGE CPP, TupleSections, BangPatterns, ConstraintKinds #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE TupleSections, BangPatterns, ConstraintKinds #-}
 
 -- | This module extends "Data.List" with extra functions of a similar nature.
 --   The package also exports the existing "Data.List" functions.
@@ -13,17 +12,17 @@
     unescapeHTML, unescapeJSON,
     -- * Splitting
     dropEnd, takeEnd, splitAtEnd, breakEnd, spanEnd,
-    dropWhileEnd, dropWhileEnd', takeWhileEnd,
+    dropWhileEnd', takeWhileEnd,
     stripSuffix, stripInfix, stripInfixEnd,
     dropPrefix, dropSuffix,
     wordsBy, linesBy,
     breakOn, breakOnEnd, splitOn, split, chunksOf,
     -- * Basics
-    notNull, list, uncons, unsnoc, cons, snoc, drop1, mconcatMap,
+    notNull, list, unsnoc, cons, snoc, drop1, mconcatMap,
     -- * List operations
     groupSort, groupSortOn, groupSortBy,
     nubOrd, nubOrdBy, nubOrdOn,
-    nubOn, groupOn, sortOn,
+    nubOn, groupOn,
     nubSort, nubSortBy, nubSortOn,
     maximumOn, minimumOn,
     disjoint, allSame, anySame,
@@ -114,17 +113,6 @@
 list nil cons [] = nil
 list nil cons (x:xs) = cons x xs
 
-#if __GLASGOW_HASKELL__ < 709
--- | If the list is empty returns 'Nothing', otherwise returns the 'head' and 
the 'tail'.
---
--- > uncons "test" == Just ('t',"est")
--- > uncons ""     == Nothing
--- > \xs -> uncons xs == if null xs then Nothing else Just (head xs, tail xs)
-uncons :: [a] -> Maybe (a, [a])
-uncons [] = Nothing
-uncons (x:xs) = Just (x,xs)
-#endif
-
 -- | If the list is empty returns 'Nothing', otherwise returns the 'init' and 
the 'last'.
 --
 -- > unsnoc "test" == Just ("tes",'t')
@@ -353,18 +341,6 @@
 unescapeJSON [] = []
 
 
-#if __GLASGOW_HASKELL__ < 709
--- | Sort a list by comparing the results of a key function applied to each
--- element.  @sortOn f@ is equivalent to @sortBy (comparing f)@, but has the
--- performance advantage of only evaluating @f@ once for each element in the
--- input list.  This is called the decorate-sort-undecorate paradigm, or
--- Schwartzian transform.
---
--- > sortOn fst [(3,"z"),(1,""),(3,"a")] == [(1,""),(3,"z"),(3,"a")]
-sortOn :: Ord b => (a -> b) -> [a] -> [a]
-sortOn f = map snd . sortBy (compare `on` fst) . map (\x -> let y = f x in y 
`seq` (y, x))
-#endif
-
 -- | A version of 'group' where the equality is done on some extracted value.
 groupOn :: Eq b => (a -> b) -> [a] -> [[a]]
 groupOn f = groupBy ((==) `on2` f)
@@ -571,12 +547,6 @@
 split f (x:xs) | y:ys <- split f xs = (x:y) : ys
 
 
-#if __GLASGOW_HASKELL__ < 704
-dropWhileEnd :: (a -> Bool) -> [a] -> [a]
-dropWhileEnd p = foldr (\x xs -> if p x && null xs then [] else x : xs) []
-#endif
-
-
 -- | A version of 'dropWhileEnd' but with different strictness properties.
 --   The function 'dropWhileEnd' can be used on an infinite list and tests the 
property
 --   on each character. In contrast, 'dropWhileEnd'' is strict in the spine of 
the list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Data/List/NonEmpty/Extra.hs 
new/extra-1.6.15/src/Data/List/NonEmpty/Extra.hs
--- old/extra-1.6.14/src/Data/List/NonEmpty/Extra.hs    1970-01-01 
01:00:00.000000000 +0100
+++ new/extra-1.6.15/src/Data/List/NonEmpty/Extra.hs    2019-04-22 
20:25:59.000000000 +0200
@@ -0,0 +1,93 @@
+{-# LANGUAGE CPP #-}
+
+-- | Extra functions for working with 'NonEmpty' lists. The package
+--   also exports the existing "Data.List.NonEmpty" functions.
+module Data.List.NonEmpty.Extra(
+    module Data.List.NonEmpty,
+    (|:), (|>), snoc,
+    appendl, appendr,
+    sortOn, union, unionBy,
+    maximum1, minimum1, maximumBy1, minimumBy1, maximumOn1, minimumOn1
+    ) where
+
+import           Data.Function
+import qualified Data.List as List
+import           Data.List.NonEmpty
+
+#if __GLASGOW_HASKELL__ <= 802
+import Data.Semigroup ((<>))
+#endif
+
+infixl 5 |>, |:
+
+-- | /O(n)/. Append an element to a non-empty list.
+--
+-- > (1 :| [2,3]) |> 4 |> 5 == 1 :| [2,3,4,5]
+(|>) :: NonEmpty a -> a -> NonEmpty a
+(|>) xs x = xs <> pure x
+
+-- | Synonym for '|>'.
+snoc :: NonEmpty a -> a -> NonEmpty a
+snoc = (|>)
+
+-- | /O(n)/. Append an element to a list.
+--
+-- > [1,2,3] |: 4 |> 5 == 1 :| [2,3,4,5]
+(|:) :: [a] -> a -> NonEmpty a
+(|:) xs x = foldr cons (pure x) xs
+
+-- | Append a list to a non-empty list.
+--
+-- > appendl (1 :| [2,3]) [4,5] == 1 :| [2,3,4,5]
+appendl :: NonEmpty a -> [a] -> NonEmpty a
+appendl (x :| xs) l = x :| (xs ++ l)
+
+-- | Append a non-empty list to a list.
+--
+-- > appendr [1,2,3] (4 :| [5]) == 1 :| [2,3,4,5]
+appendr :: [a] -> NonEmpty a -> NonEmpty a
+appendr l nel = foldr cons nel l
+
+-- | Sort by comparing the results of a function applied to each element.
+--   The sort is stable, and the function is evaluated only once for
+--   each element.
+sortOn :: Ord b => (a -> b) -> NonEmpty a -> NonEmpty a
+sortOn f = fromList . List.sortOn f . toList
+
+-- | Return the union of two non-empty lists. Duplicates, and elements of the
+--   first list, are removed from the the second list, but if the first list
+--   contains duplicates, so will the result.
+--
+-- > (1 :| [3, 5, 3]) `union` (4 :| [5, 3, 5, 2]) == 1 :| [3, 5, 3, 4, 2]
+union :: Eq a => NonEmpty a -> NonEmpty a -> NonEmpty a
+union = unionBy (==)
+
+-- | The non-overloaded version of 'union'.
+unionBy :: (a -> a -> Bool) -> NonEmpty a -> NonEmpty a -> NonEmpty a
+unionBy eq xs ys = fromList $ List.unionBy eq (toList xs) (toList ys)
+
+-- | The largest element of a non-empty list.
+maximum1 :: Ord a => NonEmpty a -> a
+maximum1 = List.maximum
+
+-- | The least element of a non-empty list.
+minimum1 :: Ord a => NonEmpty a -> a
+minimum1 = List.minimum
+
+-- | The largest element of a non-empty list with respect to the given
+--   comparison function.
+maximumBy1 :: (a -> a -> Ordering) -> NonEmpty a -> a
+maximumBy1 = List.maximumBy
+
+-- | The least element of a non-empty list with respect to the given
+--   comparison function.
+minimumBy1 :: (a -> a -> Ordering) -> NonEmpty a -> a
+minimumBy1 = List.minimumBy
+
+-- | A version of 'maximum1' where the comparison is done on some extracted 
value.
+maximumOn1 :: Ord b => (a -> b) -> NonEmpty a -> a
+maximumOn1 f = maximumBy1 (compare `on` f)
+
+-- | A version of 'minimum1' where the comparison is done on some extracted 
value.
+minimumOn1 :: Ord b => (a -> b) -> NonEmpty a -> a
+minimumOn1 f = minimumBy1 (compare `on` f)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Data/Typeable/Extra.hs 
new/extra-1.6.15/src/Data/Typeable/Extra.hs
--- old/extra-1.6.14/src/Data/Typeable/Extra.hs 2016-06-15 20:34:55.000000000 
+0200
+++ new/extra-1.6.15/src/Data/Typeable/Extra.hs 2019-02-25 17:04:47.000000000 
+0100
@@ -1,129 +1,10 @@
-{-# LANGUAGE CPP, ScopedTypeVariables, TypeOperators, GADTs, 
StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
 
 -- | This module extends "Data.Typeable" with extra functions available in 
later GHC versions.
 --   The package also exports the existing "Data.Typeable" functions.
+--
+--   Currently this module has no functionality beyond "Data.Typeable".
 module Data.Typeable.Extra(
-    typeRep, (:~:)(..), Proxy(..),
     module Data.Typeable
     ) where
 
 import Data.Typeable
-
-#if __GLASGOW_HASKELL__ < 708
-
-import Data.Ix
-import Data.Monoid
-import Control.Monad
-import Control.Applicative
-
-
--- | Takes a value of type @a@ and returns a concrete representation
---   of that type.
---
--- > typeRep (Proxy :: Proxy Int) == typeOf (1 :: Int)
-typeRep :: forall proxy a. Typeable a => proxy a -> TypeRep
-typeRep _ = typeOf (undefined :: a)
-
-
-infix 4 :~:
-
--- | Propositional equality. If @a :~: b@ is inhabited by some terminating
--- value, then the type @a@ is the same as the type @b@. To use this equality
--- in practice, pattern-match on the @a :~: b@ to get out the @Refl@ 
constructor;
--- in the body of the pattern-match, the compiler knows that @a ~ b@.
-data a :~: b where
-    Refl :: a :~: a
-
-deriving instance Eq   (a :~: b)
-deriving instance Show (a :~: b)
-deriving instance Ord  (a :~: b)
-
-instance a ~ b => Read (a :~: b) where
-  readsPrec d = readParen (d > 10) (\r -> [(Refl, s) | ("Refl",s) <- lex r ])
-
-instance a ~ b => Enum (a :~: b) where
-  toEnum 0 = Refl
-  toEnum _ = errorWithoutStackTrace "Data.Type.Equality.toEnum: bad argument"
-
-  fromEnum Refl = 0
-
-instance a ~ b => Bounded (a :~: b) where
-  minBound = Refl
-  maxBound = Refl
-
-
-
--- | A canonical proxy type
-data Proxy t = Proxy
-
--- It's common to use (undefined :: Proxy t) and (Proxy :: Proxy t)
--- interchangeably, so all of these instances are hand-written to be
--- lazy in Proxy arguments.
-
-instance Eq (Proxy s) where
-  _ == _ = True
-
-instance Ord (Proxy s) where
-  compare _ _ = EQ
-
-instance Show (Proxy s) where
-  showsPrec _ _ = showString "Proxy"
-
-instance Read (Proxy s) where
-  readsPrec d = readParen (d > 10) (\r -> [(Proxy, s) | ("Proxy",s) <- lex r ])
-
-errorWithoutStackTrace = error
-
-instance Enum (Proxy s) where
-    succ _               = errorWithoutStackTrace "Proxy.succ"
-    pred _               = errorWithoutStackTrace "Proxy.pred"
-    fromEnum _           = 0
-    toEnum 0             = Proxy
-    toEnum _             = errorWithoutStackTrace "Proxy.toEnum: 0 expected"
-    enumFrom _           = [Proxy]
-    enumFromThen _ _     = [Proxy]
-    enumFromThenTo _ _ _ = [Proxy]
-    enumFromTo _ _       = [Proxy]
-
-instance Ix (Proxy s) where
-    range _           = [Proxy]
-    index _ _         = 0
-    inRange _ _       = True
-    rangeSize _       = 1
-
-instance Bounded (Proxy s) where
-    minBound = Proxy
-    maxBound = Proxy
-
-instance Monoid (Proxy s) where
-    mempty = Proxy
-    mappend _ _ = Proxy
-    mconcat _ = Proxy
-
-instance Functor Proxy where
-    fmap _ _ = Proxy
-    {-# INLINE fmap #-}
-
-instance Applicative Proxy where
-    pure _ = Proxy
-    {-# INLINE pure #-}
-    _ <*> _ = Proxy
-    {-# INLINE (<*>) #-}
-
-instance Alternative Proxy where
-    empty = Proxy
-    {-# INLINE empty #-}
-    _ <|> _ = Proxy
-    {-# INLINE (<|>) #-}
-
-instance Monad Proxy where
-    return = pure
-    _ >>= _ = Proxy
-    {-# INLINE (>>=) #-}
-
-instance MonadPlus Proxy where
-    mzero = empty
-    mplus = (<|>)
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Data/Version/Extra.hs 
new/extra-1.6.15/src/Data/Version/Extra.hs
--- old/extra-1.6.14/src/Data/Version/Extra.hs  2017-12-07 13:09:51.000000000 
+0100
+++ new/extra-1.6.15/src/Data/Version/Extra.hs  2019-02-25 17:05:16.000000000 
+0100
@@ -1,11 +1,10 @@
-{-# LANGUAGE CPP, ConstraintKinds #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# LANGUAGE ConstraintKinds #-}
 
 -- | This module extends "Data.Version" with extra utilities.
 --   The package also exports the existing "Data.Version" functions.
 module Data.Version.Extra(
     module Data.Version,
-    makeVersion, readVersion
+    readVersion
     ) where
 
 import Partial
@@ -14,16 +13,6 @@
 import Text.ParserCombinators.ReadP
 
 
-#if __GLASGOW_HASKELL__ < 710
-
--- | Construct tag-less 'Version'
---
--- > showVersion (makeVersion [1,2,3]) == "1.2.3"
-makeVersion :: [Int] -> Version
-makeVersion b = Version b []
-
-#endif
-
 -- | Read a 'Version' or throw an exception.
 --
 -- > \x -> readVersion (showVersion x) == x
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Extra.hs 
new/extra-1.6.15/src/Extra.hs
--- old/extra-1.6.14/src/Extra.hs       2018-12-10 15:41:09.000000000 +0100
+++ new/extra-1.6.15/src/Extra.hs       2019-04-22 20:25:59.000000000 +0200
@@ -8,40 +8,37 @@
 module Extra {-# DEPRECATED "This module is provided as documentation of all 
new functions, you should import the more specific modules directly." #-} (
     -- * Control.Concurrent.Extra
     -- | Extra functions available in @"Control.Concurrent.Extra"@.
-    getNumCapabilities, setNumCapabilities, withNumCapabilities, forkFinally, 
once, onceFork, Lock, newLock, withLock, withLockTry, Var, newVar, readVar, 
writeVar, modifyVar, modifyVar_, withVar, Barrier, newBarrier, signalBarrier, 
waitBarrier, waitBarrierMaybe,
+    withNumCapabilities, once, onceFork, Lock, newLock, withLock, withLockTry, 
Var, newVar, readVar, writeVar, modifyVar, modifyVar_, withVar, Barrier, 
newBarrier, signalBarrier, waitBarrier, waitBarrierMaybe,
     -- * Control.Exception.Extra
     -- | Extra functions available in @"Control.Exception.Extra"@.
-    Partial, retry, retryBool, errorWithoutStackTrace, showException, 
stringException, errorIO, displayException, ignore, catch_, handle_, try_, 
catchJust_, handleJust_, tryJust_, catchBool, handleBool, tryBool,
+    Partial, retry, retryBool, errorWithoutStackTrace, showException, 
stringException, errorIO, ignore, catch_, handle_, try_, catchJust_, 
handleJust_, tryJust_, catchBool, handleBool, tryBool,
     -- * Control.Monad.Extra
     -- | Extra functions available in @"Control.Monad.Extra"@.
-    whenJust, whenJustM, whenMaybe, whenMaybeM, unit, maybeM, eitherM, loop, 
loopM, whileM, partitionM, concatMapM, concatForM, mconcatMapM, mapMaybeM, 
findM, firstJustM, fold1M, fold1M_, whenM, unlessM, ifM, notM, (||^), (&&^), 
orM, andM, anyM, allM,
+    whenJust, whenJustM, whenMaybe, whenMaybeM, unit, maybeM, fromMaybeM, 
eitherM, loop, loopM, whileM, partitionM, concatMapM, concatForM, mconcatMapM, 
mapMaybeM, findM, firstJustM, fold1M, fold1M_, whenM, unlessM, ifM, notM, 
(||^), (&&^), orM, andM, anyM, allM,
     -- * Data.Either.Extra
     -- | Extra functions available in @"Data.Either.Extra"@.
-    isLeft, isRight, fromLeft, fromRight, fromEither, fromLeft', fromRight', 
eitherToMaybe, maybeToEither, mapLeft, mapRight,
+    fromLeft, fromRight, fromEither, fromLeft', fromRight', eitherToMaybe, 
maybeToEither, mapLeft, mapRight,
     -- * Data.IORef.Extra
     -- | Extra functions available in @"Data.IORef.Extra"@.
-    modifyIORef', writeIORef', atomicModifyIORef', atomicWriteIORef, 
atomicWriteIORef',
+    writeIORef', atomicWriteIORef',
     -- * Data.List.Extra
     -- | Extra functions available in @"Data.List.Extra"@.
-    lower, upper, trim, trimStart, trimEnd, word1, line1, escapeHTML, 
escapeJSON, unescapeHTML, unescapeJSON, dropEnd, takeEnd, splitAtEnd, breakEnd, 
spanEnd, dropWhileEnd, dropWhileEnd', takeWhileEnd, stripSuffix, stripInfix, 
stripInfixEnd, dropPrefix, dropSuffix, wordsBy, linesBy, breakOn, breakOnEnd, 
splitOn, split, chunksOf, notNull, list, uncons, unsnoc, cons, snoc, drop1, 
mconcatMap, groupSort, groupSortOn, groupSortBy, nubOrd, nubOrdBy, nubOrdOn, 
nubOn, groupOn, sortOn, nubSort, nubSortBy, nubSortOn, maximumOn, minimumOn, 
disjoint, allSame, anySame, repeatedly, for, firstJust, concatUnzip, 
concatUnzip3, zipFrom, zipWithFrom, replace, merge, mergeBy,
+    lower, upper, trim, trimStart, trimEnd, word1, line1, escapeHTML, 
escapeJSON, unescapeHTML, unescapeJSON, dropEnd, takeEnd, splitAtEnd, breakEnd, 
spanEnd, dropWhileEnd', takeWhileEnd, stripSuffix, stripInfix, stripInfixEnd, 
dropPrefix, dropSuffix, wordsBy, linesBy, breakOn, breakOnEnd, splitOn, split, 
chunksOf, notNull, list, unsnoc, cons, snoc, drop1, mconcatMap, groupSort, 
groupSortOn, groupSortBy, nubOrd, nubOrdBy, nubOrdOn, nubOn, groupOn, nubSort, 
nubSortBy, nubSortOn, maximumOn, minimumOn, disjoint, allSame, anySame, 
repeatedly, for, firstJust, concatUnzip, concatUnzip3, zipFrom, zipWithFrom, 
replace, merge, mergeBy,
+    -- * Data.List.NonEmpty.Extra
+    -- | Extra functions available in @"Data.List.NonEmpty.Extra"@.
+    (|:), (|>), appendl, appendr, maximum1, minimum1, maximumBy1, minimumBy1, 
maximumOn1, minimumOn1,
     -- * Data.Tuple.Extra
     -- | Extra functions available in @"Data.Tuple.Extra"@.
     first, second, (***), (&&&), dupe, both, fst3, snd3, thd3, curry3, 
uncurry3,
-    -- * Data.Typeable.Extra
-    -- | Extra functions available in @"Data.Typeable.Extra"@.
-    typeRep, (:~:)(..), Proxy(..),
     -- * Data.Version.Extra
     -- | Extra functions available in @"Data.Version.Extra"@.
-    makeVersion, readVersion,
+    readVersion,
     -- * Numeric.Extra
     -- | Extra functions available in @"Numeric.Extra"@.
     showDP, intToDouble, intToFloat, floatToDouble, doubleToFloat,
     -- * System.Directory.Extra
     -- | Extra functions available in @"System.Directory.Extra"@.
     withCurrentDirectory, createDirectoryPrivate, listContents, 
listDirectories, listFiles, listFilesInside, listFilesRecursive,
-    -- * System.Environment.Extra
-    -- | Extra functions available in @"System.Environment.Extra"@.
-    getExecutablePath, lookupEnv,
     -- * System.Info.Extra
     -- | Extra functions available in @"System.Info.Extra"@.
     isWindows, isMac,
@@ -54,9 +51,6 @@
     -- * System.Time.Extra
     -- | Extra functions available in @"System.Time.Extra"@.
     Seconds, sleep, timeout, showDuration, offsetTime, offsetTimeIncrease, 
duration,
-    -- * Text.Read.Extra
-    -- | Extra functions available in @"Text.Read.Extra"@.
-    readEither, readMaybe,
     ) where
 
 import Control.Concurrent.Extra
@@ -65,14 +59,12 @@
 import Data.Either.Extra
 import Data.IORef.Extra
 import Data.List.Extra
+import Data.List.NonEmpty.Extra hiding (cons, snoc, sortOn, union, unionBy)
 import Data.Tuple.Extra
-import Data.Typeable.Extra
 import Data.Version.Extra
 import Numeric.Extra
 import System.Directory.Extra
-import System.Environment.Extra
 import System.Info.Extra
 import System.IO.Extra
 import System.Process.Extra
 import System.Time.Extra
-import Text.Read.Extra
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Numeric/Extra.hs 
new/extra-1.6.15/src/Numeric/Extra.hs
--- old/extra-1.6.14/src/Numeric/Extra.hs       2016-07-02 05:59:24.000000000 
+0200
+++ new/extra-1.6.15/src/Numeric/Extra.hs       2019-02-25 16:47:08.000000000 
+0100
@@ -7,7 +7,7 @@
     ) where
 
 import Numeric
-import Control.Arrow
+
 
 ---------------------------------------------------------------------
 -- Data.String
@@ -18,8 +18,7 @@
 -- > showDP 0 pi == "3"
 -- > showDP 2 3  == "3.00"
 showDP :: RealFloat a => Int -> a -> String
-showDP n x = a ++ (if n > 0 then "." else "") ++ b ++ replicate (n - length b) 
'0'
-    where (a,b) = second (drop 1) $ break (== '.') $ showFFloat (Just n) x ""
+showDP n x = showFFloat (Just n) x ""
 
 
 ---------------------------------------------------------------------
@@ -40,5 +39,3 @@
 -- | Specialised numeric conversion, type restricted version of 'realToFrac'.
 doubleToFloat :: Double -> Float
 doubleToFloat = realToFrac
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/System/Environment/Extra.hs 
new/extra-1.6.15/src/System/Environment/Extra.hs
--- old/extra-1.6.14/src/System/Environment/Extra.hs    2017-05-09 
22:38:47.000000000 +0200
+++ new/extra-1.6.15/src/System/Environment/Extra.hs    2019-02-25 
17:06:01.000000000 +0100
@@ -1,26 +1,10 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
 
 -- | Extra functions for "System.Environment". All these functions are 
available in later GHC versions,
 --   but this code works all the way back to GHC 7.2.
+--
+--   Currently this module has no functionality beyond "System.Environment".
 module System.Environment.Extra(
     module System.Environment,
-    getExecutablePath, lookupEnv
     ) where
 
 import System.Environment
-
-#if __GLASGOW_HASKELL__ < 706
-import Control.Exception.Extra
-import System.IO.Error
-import Data.Functor
-
--- | Alias for 'getProgName' in GHC 7.4 and below, otherwise
---   returns the absolute pathname of the current executable.
-getExecutablePath :: IO FilePath
-getExecutablePath = getProgName
-
--- | Return the value of the environment variable var, or Nothing if there is 
no such value.
-lookupEnv :: String -> IO (Maybe String)
-lookupEnv x = catchBool isDoesNotExistError (Just <$> getEnv x) (const $ 
return Nothing)
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/src/Text/Read/Extra.hs 
new/extra-1.6.15/src/Text/Read/Extra.hs
--- old/extra-1.6.14/src/Text/Read/Extra.hs     2017-12-07 12:52:28.000000000 
+0100
+++ new/extra-1.6.15/src/Text/Read/Extra.hs     2019-02-25 17:08:09.000000000 
+0100
@@ -1,38 +1,9 @@
-{-# LANGUAGE CPP #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
 
 -- | This module provides "Text.Read" with functions added in later versions.
+--
+--   Currently this module has no functionality beyond "Text.Read".
 module Text.Read.Extra(
     module Text.Read,
-    readEither, readMaybe
     ) where
 
 import Text.Read
-
-#if __GLASGOW_HASKELL__ < 706
-
-import Text.ParserCombinators.ReadP as P
-
--- | Parse a string using the 'Read' instance.
--- Succeeds if there is exactly one valid result.
--- A 'Left' value indicates a parse error.
-readEither :: Read a => String -> Either String a
-readEither s =
-  case [ x | (x,"") <- readPrec_to_S read' minPrec s ] of
-    [x] -> Right x
-    []  -> Left "Prelude.read: no parse"
-    _   -> Left "Prelude.read: ambiguous parse"
- where
-  read' =
-    do x <- readPrec
-       lift P.skipSpaces
-       return x
-
--- | Parse a string using the 'Read' instance.
--- Succeeds if there is exactly one valid result.
-readMaybe :: Read a => String -> Maybe a
-readMaybe s = case readEither s of
-                Left _  -> Nothing
-                Right a -> Just a
-
-#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/test/TestGen.hs 
new/extra-1.6.15/test/TestGen.hs
--- old/extra-1.6.14/test/TestGen.hs    2018-12-10 15:41:24.000000000 +0100
+++ new/extra-1.6.15/test/TestGen.hs    2019-04-22 20:25:59.000000000 +0200
@@ -94,9 +94,6 @@
     testGen "list 1 (\\v _ -> v - 2) [5,6,7] == 3" $ list 1 (\v _ -> v - 2) 
[5,6,7] == 3
     testGen "list 1 (\\v _ -> v - 2) []      == 1" $ list 1 (\v _ -> v - 2) [] 
     == 1
     testGen "\\nil cons xs -> maybe nil (uncurry cons) (uncons xs) == list nil 
cons xs" $ \nil cons xs -> maybe nil (uncurry cons) (uncons xs) == list nil 
cons xs
-    testGen "uncons \"test\" == Just ('t',\"est\")" $ uncons "test" == Just 
('t',"est")
-    testGen "uncons \"\"     == Nothing" $ uncons ""     == Nothing
-    testGen "\\xs -> uncons xs == if null xs then Nothing else Just (head xs, 
tail xs)" $ \xs -> uncons xs == if null xs then Nothing else Just (head xs, 
tail xs)
     testGen "unsnoc \"test\" == Just (\"tes\",'t')" $ unsnoc "test" == Just 
("tes",'t')
     testGen "unsnoc \"\"     == Nothing" $ unsnoc ""     == Nothing
     testGen "\\xs -> unsnoc xs == if null xs then Nothing else Just (init xs, 
last xs)" $ \xs -> unsnoc xs == if null xs then Nothing else Just (init xs, 
last xs)
@@ -151,7 +148,6 @@
     testGen "escapeJSON \"\\ttab\\nnewline\\\\\" == 
\"\\\\ttab\\\\nnewline\\\\\\\\\"" $ escapeJSON "\ttab\nnewline\\" == 
"\\ttab\\nnewline\\\\"
     testGen "escapeJSON \"\\ESC[0mHello\" == \"\\\\u001b[0mHello\"" $ 
escapeJSON "\ESC[0mHello" == "\\u001b[0mHello"
     testGen "\\xs -> unescapeJSON (escapeJSON xs) == xs" $ \xs -> unescapeJSON 
(escapeJSON xs) == xs
-    testGen "sortOn fst [(3,\"z\"),(1,\"\"),(3,\"a\")] == 
[(1,\"\"),(3,\"z\"),(3,\"a\")]" $ sortOn fst [(3,"z"),(1,""),(3,"a")] == 
[(1,""),(3,"z"),(3,"a")]
     testGen "groupSort [(1,'t'),(3,'t'),(2,'e'),(2,'s')] == 
[(1,\"t\"),(2,\"es\"),(3,\"t\")]" $ groupSort [(1,'t'),(3,'t'),(2,'e'),(2,'s')] 
== [(1,"t"),(2,"es"),(3,"t")]
     testGen "\\xs -> map fst (groupSort xs) == sort (nub (map fst xs))" $ \xs 
-> map fst (groupSort xs) == sort (nub (map fst xs))
     testGen "\\xs -> concatMap snd (groupSort xs) == map snd (sortOn fst xs)" 
$ \xs -> concatMap snd (groupSort xs) == map snd (sortOn fst xs)
@@ -227,14 +223,17 @@
     testGen "\\xs -> nubOrd xs == nub xs" $ \xs -> nubOrd xs == nub xs
     testGen "nubOrdOn length [\"a\",\"test\",\"of\",\"this\"] == 
[\"a\",\"test\",\"of\"]" $ nubOrdOn length ["a","test","of","this"] == 
["a","test","of"]
     testGen "nubOrdBy (compare `on` length) [\"a\",\"test\",\"of\",\"this\"] 
== [\"a\",\"test\",\"of\"]" $ nubOrdBy (compare `on` length) 
["a","test","of","this"] == ["a","test","of"]
+    testGen "(1 :| [2,3]) |> 4 |> 5 == 1 :| [2,3,4,5]" $ (1 :| [2,3]) |> 4 |> 
5 == 1 :| [2,3,4,5]
+    testGen "[1,2,3] |: 4 |> 5 == 1 :| [2,3,4,5]" $ [1,2,3] |: 4 |> 5 == 1 :| 
[2,3,4,5]
+    testGen "appendl (1 :| [2,3]) [4,5] == 1 :| [2,3,4,5]" $ appendl (1 :| 
[2,3]) [4,5] == 1 :| [2,3,4,5]
+    testGen "appendr [1,2,3] (4 :| [5]) == 1 :| [2,3,4,5]" $ appendr [1,2,3] 
(4 :| [5]) == 1 :| [2,3,4,5]
+    testGen "(1 :| [3, 5, 3]) `union` (4 :| [5, 3, 5, 2]) == 1 :| [3, 5, 3, 4, 
2]" $ (1 :| [3, 5, 3]) `union` (4 :| [5, 3, 5, 2]) == 1 :| [3, 5, 3, 4, 2]
     testGen "first succ (1,\"test\") == (2,\"test\")" $ first succ (1,"test") 
== (2,"test")
     testGen "second reverse (1,\"test\") == (1,\"tset\")" $ second reverse 
(1,"test") == (1,"tset")
     testGen "(succ *** reverse) (1,\"test\") == (2,\"tset\")" $ (succ *** 
reverse) (1,"test") == (2,"tset")
     testGen "(succ &&& pred) 1 == (2,0)" $ (succ &&& pred) 1 == (2,0)
     testGen "dupe 12 == (12, 12)" $ dupe 12 == (12, 12)
     testGen "both succ (1,2) == (2,3)" $ both succ (1,2) == (2,3)
-    testGen "typeRep (Proxy :: Proxy Int) == typeOf (1 :: Int)" $ typeRep 
(Proxy :: Proxy Int) == typeOf (1 :: Int)
-    testGen "showVersion (makeVersion [1,2,3]) == \"1.2.3\"" $ showVersion 
(makeVersion [1,2,3]) == "1.2.3"
     testGen "\\x -> readVersion (showVersion x) == x" $ \x -> readVersion 
(showVersion x) == x
     testGen "readVersion \"hello\" == undefined" $ erroneous $ readVersion 
"hello"
     testGen "showDP 4 pi == \"3.1416\"" $ showDP 4 pi == "3.1416"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/extra-1.6.14/test/TestUtil.hs 
new/extra-1.6.15/test/TestUtil.hs
--- old/extra-1.6.14/test/TestUtil.hs   2018-10-02 16:08:01.000000000 +0200
+++ new/extra-1.6.15/test/TestUtil.hs   2019-04-22 20:25:59.000000000 +0200
@@ -1,4 +1,4 @@
-{-# LANGUAGE ScopedTypeVariables, CPP, FlexibleInstances #-}
+{-# LANGUAGE ScopedTypeVariables, FlexibleInstances #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-} -- OK because a test module
 
 module TestUtil
@@ -22,7 +22,8 @@
 import Data.Either.Extra as X
 import Data.Function as X
 import Data.IORef.Extra as X
-import Data.List.Extra as X
+import Data.List.Extra as X hiding (union, unionBy)
+import Data.List.NonEmpty.Extra as X (NonEmpty(..), (|>), (|:), appendl, 
appendr, union, unionBy)
 import Data.Monoid as X
 import Data.Tuple.Extra as X
 import Data.Typeable.Extra as X
@@ -65,11 +66,6 @@
     | a == b = True
     | otherwise = error $ "Not equal!\n" ++ show a ++ "\n" ++ show b
 
-#if __GLASGOW_HASKELL__ < 707
-instance Eq ErrorCall where
-    ErrorCall x == ErrorCall y = x == y
-#endif
-
 runTests :: IO () -> IO ()
 runTests t = do
     -- ensure that capturing output is robust


Reply via email to