Hello community,

here is the log from the commit of package ghc-turtle for openSUSE:Leap:15.2 
checked in at 2020-02-19 18:41:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Leap:15.2/ghc-turtle (Old)
 and      /work/SRC/openSUSE:Leap:15.2/.ghc-turtle.new.26092 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-turtle"

Wed Feb 19 18:41:54 2020 rev:13 rq:771506 version:1.5.15

Changes:
--------
--- /work/SRC/openSUSE:Leap:15.2/ghc-turtle/ghc-turtle.changes  2020-01-15 
15:02:42.761819101 +0100
+++ /work/SRC/openSUSE:Leap:15.2/.ghc-turtle.new.26092/ghc-turtle.changes       
2020-02-19 18:41:54.786249889 +0100
@@ -1,0 +2,42 @@
+Fri Nov  8 16:15:04 UTC 2019 - Peter Simons <psim...@suse.com>
+
+- Drop obsolete group attributes.
+
+-------------------------------------------------------------------
+Fri Sep 20 02:02:13 UTC 2019 - psim...@suse.com
+
+- Update turtle to version 1.5.15.
+  1.5.15
+
+  * Add `toLines`
+  * Add `Turtle.Bytes.{fromUTF8,toUTF8}`
+  * Add `Turtle.Bytes.{compress,decompress}`
+  * Always expose a `MonadFail` instance, relying on the `fail` package
+    where needed. Related GHC 8.8 preparedness.
+
+-------------------------------------------------------------------
+Sun Jul 28 08:15:57 UTC 2019 - Peter Simons <psim...@suse.com>
+
+- Update Cabal file for more accurate build dependencies.
+
+-------------------------------------------------------------------
+Fri May 17 08:26:56 UTC 2019 - Peter Simons <psim...@suse.com>
+
+- Update Cabal file for more accurate build dependencies.
+
+-------------------------------------------------------------------
+Fri May  3 19:02:57 UTC 2019 - Peter Simons <psim...@suse.com>
+
+- Update Cabal build instructions for more accurate dependencies.
+
+-------------------------------------------------------------------
+Sat Apr 20 09:17:06 UTC 2019 - psim...@suse.com
+
+- Update turtle to version 1.5.14.
+  1.5.14
+
+  * Fix `cptree` to copy symlinks instead of descending into them
+      * See: https://github.com/Gabriel439/Haskell-Turtle-Library/pull/344
+  * Build against newer versions of `Win32` package
+
+-------------------------------------------------------------------

Old:
----
  turtle-1.5.13.tar.gz

New:
----
  turtle-1.5.15.tar.gz
  turtle.cabal

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

Other differences:
------------------
++++++ ghc-turtle.spec ++++++
--- /var/tmp/diff_new_pack.vcIQG7/_old  2020-02-19 18:41:55.242250845 +0100
+++ /var/tmp/diff_new_pack.vcIQG7/_new  2020-02-19 18:41:55.246250854 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package ghc-turtle
 #
-# 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,13 +19,13 @@
 %global pkg_name turtle
 %bcond_with tests
 Name:           ghc-%{pkg_name}
-Version:        1.5.13
+Version:        1.5.15
 Release:        0
 Summary:        Shell programming, Haskell-style
 License:        BSD-3-Clause
-Group:          Development/Libraries/Haskell
 URL:            https://hackage.haskell.org/package/%{pkg_name}
 Source0:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/%{pkg_name}-%{version}.tar.gz
+Source1:        
https://hackage.haskell.org/package/%{pkg_name}-%{version}/revision/1.cabal#/%{pkg_name}.cabal
 BuildRequires:  ghc-Cabal-devel
 BuildRequires:  ghc-ansi-wl-pprint-devel
 BuildRequires:  ghc-async-devel
@@ -43,6 +43,7 @@
 BuildRequires:  ghc-rpm-macros
 BuildRequires:  ghc-semigroups-devel
 BuildRequires:  ghc-stm-devel
+BuildRequires:  ghc-streaming-commons-devel
 BuildRequires:  ghc-system-fileio-devel
 BuildRequires:  ghc-system-filepath-devel
 BuildRequires:  ghc-temporary-devel
@@ -53,6 +54,7 @@
 BuildRequires:  ghc-unix-devel
 %if %{with tests}
 BuildRequires:  ghc-doctest-devel
+BuildRequires:  ghc-fail-devel
 %endif
 
 %description
@@ -87,7 +89,6 @@
 
 %package devel
 Summary:        Haskell %{pkg_name} library development files
-Group:          Development/Libraries/Haskell
 Requires:       %{name} = %{version}-%{release}
 Requires:       ghc-compiler = %{ghc_version}
 Requires(post): ghc-compiler = %{ghc_version}
@@ -98,6 +99,7 @@
 
 %prep
 %setup -q -n %{pkg_name}-%{version}
+cp -p %{SOURCE1} %{pkg_name}.cabal
 
 %build
 %ghc_lib_build

++++++ turtle-1.5.13.tar.gz -> turtle-1.5.15.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turtle-1.5.13/CHANGELOG.md 
new/turtle-1.5.15/CHANGELOG.md
--- old/turtle-1.5.13/CHANGELOG.md      2018-12-20 17:51:10.000000000 +0100
+++ new/turtle-1.5.15/CHANGELOG.md      2019-09-19 15:36:21.000000000 +0200
@@ -1,3 +1,17 @@
+1.5.15
+
+* Add `toLines`
+* Add `Turtle.Bytes.{fromUTF8,toUTF8}`
+* Add `Turtle.Bytes.{compress,decompress}`
+* Always expose a `MonadFail` instance, relying on the `fail` package
+  where needed. Related GHC 8.8 preparedness.
+
+1.5.14
+
+* Fix `cptree` to copy symlinks instead of descending into them
+    * See: https://github.com/Gabriel439/Haskell-Turtle-Library/pull/344
+* Build against newer versions of `Win32` package
+
 1.5.13
 
 * Fix `chmod` bug
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turtle-1.5.13/src/Turtle/Bytes.hs 
new/turtle-1.5.15/src/Turtle/Bytes.hs
--- old/turtle-1.5.13/src/Turtle/Bytes.hs       2018-12-20 17:51:10.000000000 
+0100
+++ new/turtle-1.5.15/src/Turtle/Bytes.hs       2019-09-19 15:36:21.000000000 
+0200
@@ -16,6 +16,12 @@
     , append
     , stderr
     , strict
+    , compress
+    , decompress
+    , WindowBits(..)
+    , Zlib.defaultWindowBits
+    , fromUTF8
+    , toUTF8
 
     -- * Subprocess management
     , proc
@@ -43,7 +49,9 @@
 import Control.Monad.IO.Class (MonadIO(..))
 import Control.Monad.Managed (MonadManaged(..))
 import Data.ByteString (ByteString)
+import Data.Streaming.Zlib (Inflate, Popper, PopperRes(..), WindowBits(..))
 import Data.Text (Text)
+import Data.Text.Encoding (Decoding(..))
 import Filesystem.Path (FilePath)
 import Prelude hiding (FilePath)
 import System.Exit (ExitCode(..))
@@ -61,7 +69,10 @@
 import qualified Control.Monad
 import qualified Control.Monad.Managed         as Managed
 import qualified Data.ByteString
+import qualified Data.Streaming.Zlib           as Zlib
 import qualified Data.Text
+import qualified Data.Text.Encoding            as Encoding
+import qualified Data.Text.Encoding.Error      as Encoding.Error
 import qualified Foreign
 import qualified System.IO
 import qualified System.Process                as Process
@@ -657,3 +668,136 @@
     -> Shell (Either ByteString ByteString)
     -- ^ Chunks of either output (`Right`) or error (`Left`)
 inshellWithErr cmd = streamWithErr (Process.shell (Data.Text.unpack cmd))
+
+-- | Internal utility used by both `compress` and `decompress`
+fromPopper :: Popper -> Shell ByteString
+fromPopper popper = loop
+  where
+    loop = do
+        result <- liftIO popper
+
+        case result of
+            PRDone ->
+                empty
+            PRNext compressedByteString ->
+                return compressedByteString <|> loop
+            PRError exception ->
+                liftIO (Exception.throwIO exception)
+
+{-| Compress a stream using @zlib@
+
+    Note that this can decompress streams that are the concatenation of
+    multiple compressed streams (just like @gzip@)
+
+>>> let compressed = select [ "ABC", "DEF" ] & compress 0 defaultWindowBits
+>>> compressed & decompress defaultWindowBits & view
+"ABCDEF"
+>>> (compressed <|> compressed) & decompress defaultWindowBits & view
+"ABCDEF"
+"ABCDEF"
+-}
+compress
+    :: Int
+    -- ^ Compression level
+    -> WindowBits
+    -- ^
+    -> Shell ByteString
+    -- ^
+    -> Shell ByteString
+compress compressionLevel windowBits bytestrings = do
+    deflate <- liftIO (Zlib.initDeflate compressionLevel windowBits)
+
+    let loop = do
+            bytestring <- bytestrings
+
+            popper <- liftIO (Zlib.feedDeflate deflate bytestring)
+
+            fromPopper popper
+
+    let wrapUp = do
+            let popper = liftIO (Zlib.finishDeflate deflate)
+
+            fromPopper popper
+
+    loop <|> wrapUp
+
+data DecompressionState = Uninitialized | Decompressing Inflate
+
+-- | Decompress a stream using @zlib@ (just like the @gzip@ command)
+decompress :: WindowBits -> Shell ByteString -> Shell ByteString
+decompress windowBits (Shell k) = Shell k'
+  where
+    k' (FoldShell step begin done) = k (FoldShell step' begin' done')
+      where
+        begin' = (begin, Uninitialized)
+
+        step' (x0, Uninitialized) compressedByteString = do
+            inflate <- Zlib.initInflate windowBits
+
+            step' (x0, Decompressing inflate) compressedByteString
+        step' (x0, Decompressing inflate) compressedByteString = do
+            popper <- Zlib.feedInflate inflate compressedByteString
+
+            let loop x = do
+                    result <- popper
+
+                    case result of
+                        PRDone -> do
+                            compressedByteString' <- Zlib.getUnusedInflate 
inflate
+
+                            if Data.ByteString.null compressedByteString'
+                                then return (x, Decompressing inflate)
+                                else do
+                                    decompressedByteString <- 
Zlib.finishInflate inflate
+
+                                    x' <- step x decompressedByteString
+
+                                    step' (x', Uninitialized) 
compressedByteString'
+                        PRNext decompressedByteString -> do
+                            x' <- step x decompressedByteString
+
+                            loop x'
+                        PRError exception -> do
+                            Exception.throwIO exception
+
+            loop x0
+
+        done' (x0, Uninitialized) = do
+            done x0
+        done' (x0, Decompressing inflate) = do
+            decompressedByteString <- Zlib.finishInflate inflate
+
+            x0' <- step x0 decompressedByteString
+
+            done' (x0', Uninitialized)
+
+{-| Decode a stream of bytes as UTF8 `Text`
+
+    NOTE: This function will throw a pure exception (i.e. an `error`) if UTF8
+    decoding fails (mainly due to limitations in the @text@ package's stream
+    decoding API)
+-}
+toUTF8 :: Shell ByteString -> Shell Text
+toUTF8 (Shell k) = Shell k'
+  where
+    k' (FoldShell step begin done) =
+        k (FoldShell step' begin' done')
+      where
+        begin' =
+            (mempty, Encoding.streamDecodeUtf8With 
Encoding.Error.strictDecode, begin)
+
+        step' (prefix, decoder, x) suffix = do
+            let bytes = prefix <> suffix
+
+            let Some text prefix' decoder' = decoder bytes 
+
+            x' <- step x text
+
+            return (prefix', decoder', x')
+
+        done' (_, _, x) = do
+            done x
+
+-- | Encode a stream of bytes as UTF8 `Text`
+fromUTF8 :: Shell Text -> Shell ByteString
+fromUTF8 = fmap Encoding.encodeUtf8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turtle-1.5.13/src/Turtle/Prelude.hs 
new/turtle-1.5.15/src/Turtle/Prelude.hs
--- old/turtle-1.5.13/src/Turtle/Prelude.hs     2018-12-20 17:51:10.000000000 
+0100
+++ new/turtle-1.5.15/src/Turtle/Prelude.hs     2019-09-19 15:36:21.000000000 
+0200
@@ -130,6 +130,7 @@
 #if !defined(mingw32_HOST_OS)
     , symlink
 #endif
+    , isNotSymbolicLink
     , rm
     , rmdir
     , rmtree
@@ -205,6 +206,7 @@
     , sort
     , sortOn
     , sortBy
+    , toLines
 
     -- * Folds
     , countChars
@@ -299,7 +301,7 @@
 import Control.Foldl (Fold(..), genericLength, handles, list, premap)
 import qualified Control.Foldl
 import qualified Control.Foldl.Text
-import Control.Monad (guard, liftM, msum, when, unless, (>=>), mfilter)
+import Control.Monad (foldM, guard, liftM, msum, when, unless, (>=>), mfilter)
 import Control.Monad.IO.Class (MonadIO(..))
 import Control.Monad.Managed (MonadManaged(..), managed, managed_, runManaged)
 #ifdef mingw32_HOST_OS
@@ -307,6 +309,8 @@
 #endif
 import Data.IORef (newIORef, readIORef, writeIORef)
 import qualified Data.List as List
+import Data.List.NonEmpty (NonEmpty(..))
+import qualified Data.List.NonEmpty as NonEmpty
 import Data.Monoid ((<>))
 import Data.Ord (comparing)
 import qualified Data.Set as Set
@@ -353,7 +357,7 @@
     touchFile )
 import System.Posix.Files (createSymbolicLink)      
 #endif
-import Prelude hiding (FilePath)
+import Prelude hiding (FilePath, lines)
 
 import Turtle.Pattern (Pattern, anyChar, chars, match, selfless, sepBy)
 import Turtle.Shell
@@ -1095,20 +1099,46 @@
   
 #endif
 
+{-| Returns `True` if the given `FilePath` is not a symbolic link
+
+    This comes in handy in conjunction with `lsif`:
+
+    > lsif isNotSymbolicLink
+-}
+isNotSymbolicLink :: MonadIO io => FilePath -> io Bool
+isNotSymbolicLink = fmap (not . PosixCompat.isSymbolicLink) . lstat
+
 -- | Copy a directory tree
 cptree :: MonadIO io => FilePath -> FilePath -> io ()
 cptree oldTree newTree = sh (do
-    oldPath <- lstree oldTree
+    oldPath <- lsif isNotSymbolicLink oldTree
+
     -- The `system-filepath` library treats a path like "/tmp" as a file and 
not
     -- a directory and fails to strip it as a prefix from `/tmp/foo`.  Adding
     -- `(</> "")` to the end of the path makes clear that the path is a
     -- directory
     Just suffix <- return (Filesystem.stripPrefix (oldTree </> "") oldPath)
+
     let newPath = newTree </> suffix
+
     isFile <- testfile oldPath
-    if isFile
-        then mktree (Filesystem.directory newPath) >> cp oldPath newPath
-        else mktree newPath )
+
+    fileStatus <- lstat oldPath
+
+    if PosixCompat.isSymbolicLink fileStatus
+        then do
+            oldTarget <- liftIO (PosixCompat.readSymbolicLink 
(Filesystem.encodeString oldPath))
+
+            mktree (Filesystem.directory newPath)
+
+            liftIO (PosixCompat.createSymbolicLink oldTarget 
(Filesystem.encodeString newPath))
+        else if isFile
+        then do
+            mktree (Filesystem.directory newPath)
+
+            cp oldPath newPath
+        else do
+            mktree newPath )
 
 -- | Remove a file
 rm :: MonadIO io => FilePath -> io ()
@@ -2139,3 +2169,39 @@
 -- [(1,'a'),(2,'c'),(3,'d'),(3,'e'),(4,'b'),(7,'f')]
 sortBy :: (Functor io, MonadIO io) => (a -> a -> Ordering) -> Shell a -> io [a]
 sortBy f s = List.sortBy f <$> fold s list
+
+{-| Group an arbitrary stream of `Text` into newline-delimited `Line`s
+
+>>> stdout (toLines ("ABC" <|> "DEF" <|> "GHI")
+ABCDEFGHI
+>>> stdout (toLines empty)  -- Note that this always emits at least 1 `Line`
+
+>>> stdout (toLines ("ABC\nDEF" <|> "" <|> "GHI\nJKL"))
+ABC
+DEFGHI
+JKL
+-}
+toLines :: Shell Text -> Shell Line
+toLines (Shell k) = Shell k'
+  where
+    k' (FoldShell step begin done) =
+        k (FoldShell step' begin' done')
+      where
+        step' (Pair x prefix) text = do
+            let suffix :| lines = Turtle.Line.textToLines text
+
+            let line = prefix <> suffix
+
+            let lines' = line :| lines
+
+            x' <- foldM step x (NonEmpty.init lines')
+
+            let prefix' = NonEmpty.last lines'
+
+            return (Pair x' prefix')
+
+        begin' = (Pair begin "")
+
+        done' (Pair x prefix) = do
+            x' <- step x prefix
+            done x'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turtle-1.5.13/src/Turtle/Shell.hs 
new/turtle-1.5.15/src/Turtle/Shell.hs
--- old/turtle-1.5.13/src/Turtle/Shell.hs       2018-12-20 17:51:10.000000000 
+0100
+++ new/turtle-1.5.15/src/Turtle/Shell.hs       2019-09-19 15:36:21.000000000 
+0200
@@ -81,9 +81,7 @@
 import Control.Monad.Catch (MonadThrow(..), MonadCatch(..))
 import Control.Monad.IO.Class (MonadIO(..))
 import Control.Monad.Managed (MonadManaged(..), with)
-#if MIN_VERSION_base(4,9,0)
 import qualified Control.Monad.Fail as Fail
-#endif
 import Control.Foldl (Fold(..), FoldM(..))
 import qualified Control.Foldl as Foldl
 import Data.Foldable (Foldable)
@@ -182,7 +180,9 @@
         let step1 x a = _foldShell (f a) (FoldShell step0 x return)
         _foldShell m (FoldShell step1 begin0 done0) )
 
-    fail _ = mzero
+#if!(MIN_VERSION_base(4,13,0))
+    fail = Fail.fail
+#endif
 
 instance Alternative Shell where
     empty = Shell (\(FoldShell _ begin done) -> done begin)
@@ -213,10 +213,8 @@
 instance MonadCatch Shell where
     m `catch` k = Shell (\f-> _foldShell m f `catch` (\e -> _foldShell (k e) 
f))
 
-#if MIN_VERSION_base(4,9,0)
 instance Fail.MonadFail Shell where
-    fail = Prelude.fail
-#endif
+    fail _ = mzero
 
 #if __GLASGOW_HASKELL__ >= 804
 instance Monoid a => Semigroup (Shell a) where
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turtle-1.5.13/src/Turtle/Tutorial.hs 
new/turtle-1.5.15/src/Turtle/Tutorial.hs
--- old/turtle-1.5.13/src/Turtle/Tutorial.hs    2018-12-20 17:51:10.000000000 
+0100
+++ new/turtle-1.5.15/src/Turtle/Tutorial.hs    2019-09-19 15:36:21.000000000 
+0200
@@ -1490,10 +1490,10 @@
 
 -- $monadio
 --
--- If you are sick of having type `liftIO` everywhere, you can omit it.  This
--- is because all subroutines in @turtle@ are overloaded using the `MonadIO`
--- type class, like our original `pwd` command where we first encountered the
--- the `MonadIO` type:
+-- If you are sick of having to type `liftIO` everywhere, you can omit it.
+-- This is because all subroutines in @turtle@ are overloaded using the
+-- `MonadIO` type class, like our original `pwd` command where we first
+-- encountered the the `MonadIO` type:
 --
 -- @
 -- Prelude Turtle> :type pwd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turtle-1.5.13/test/cptree.hs 
new/turtle-1.5.15/test/cptree.hs
--- old/turtle-1.5.13/test/cptree.hs    2018-12-20 17:51:10.000000000 +0100
+++ new/turtle-1.5.15/test/cptree.hs    2019-09-19 15:36:21.000000000 +0200
@@ -3,10 +3,11 @@
 import Turtle
 import Filesystem.Path.CurrentOS ()
 import System.IO.Temp (withSystemTempDirectory)
+import qualified Control.Monad.Fail as Fail
 import Control.Monad (unless)
 
 check :: String -> Bool-> IO ()
-check errorMessage successs = unless successs $ fail errorMessage
+check errorMessage successs = unless successs $ Fail.fail errorMessage
 
 main :: IO ()
 main = withSystemTempDirectory "tempDir" (runTest . fromString)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/turtle-1.5.13/turtle.cabal 
new/turtle-1.5.15/turtle.cabal
--- old/turtle-1.5.13/turtle.cabal      2018-12-20 17:51:10.000000000 +0100
+++ new/turtle-1.5.15/turtle.cabal      2019-09-19 15:36:21.000000000 +0200
@@ -1,5 +1,5 @@
 Name: turtle
-Version: 1.5.13
+Version: 1.5.15
 Cabal-Version: >=1.10
 Build-Type: Simple
 License: BSD3
@@ -53,7 +53,7 @@
         ansi-wl-pprint       >= 0.6     && < 0.7 ,
         async                >= 2.0.0.0 && < 2.3 ,
         bytestring           >= 0.9.1.8 && < 0.11,
-        clock                >= 0.4.1.2 && < 0.8 ,
+        clock                >= 0.4.1.2 && < 0.9 ,
         containers           >= 0.5.0.0 && < 0.7 ,
         directory            >= 1.0.7   && < 1.4 ,
         exceptions           >= 0.4     && < 0.11,
@@ -61,21 +61,24 @@
         hostname                           < 1.1 ,
         managed              >= 1.0.3   && < 1.1 ,
         process              >= 1.0.1.1 && < 1.7 ,
-        semigroups           >= 0.5.0   && < 0.19,
+        semigroups           >= 0.5.0   && < 0.20,
         system-filepath      >= 0.3.1   && < 0.5 ,
         system-fileio        >= 0.2.1   && < 0.4 ,
         stm                                < 2.6 ,
+        streaming-commons                  < 0.3 ,
         temporary                          < 1.4 ,
-        text                               < 1.3 ,
-        time                               < 1.9 ,
+        text                 >= 1.0.0   && < 1.3 ,
+        time                               < 1.10,
         transformers         >= 0.2.0.0 && < 0.6 ,
-        optparse-applicative >= 0.13    && < 0.15,
+        optparse-applicative >= 0.13    && < 0.16,
         optional-args        >= 1.0     && < 2.0 ,
         unix-compat          >= 0.4     && < 0.6
     if os(windows)
-        Build-Depends: Win32 >= 2.2.0.1 && < 2.6
+        Build-Depends: Win32 >= 2.2.0.1 && < 2.9
     else
         Build-Depends: unix  >= 2.5.1.0 && < 2.8
+    if !impl(ghc >= 8.0)
+        Build-Depends: fail  >= 4.9.0.0 && < 4.10
     Exposed-Modules:
         Turtle,
         Turtle.Bytes,
@@ -129,6 +132,7 @@
     Default-Language: Haskell2010
     Build-Depends:
         base   >= 4 && < 5,
+        fail,
         temporary,
         system-filepath >= 0.4,
         turtle

++++++ turtle.cabal ++++++
Name: turtle
Version: 1.5.15
x-revision: 1
Cabal-Version: >=1.10
Build-Type: Simple
License: BSD3
License-File: LICENSE
Copyright: 2015 Gabriel Gonzalez
Author: Gabriel Gonzalez
Maintainer: gabriel...@gmail.com
Tested-With: GHC == 7.10.2, GHC == 8.0.1
Bug-Reports: https://github.com/Gabriel439/Haskell-Turtle-Library/issues
Synopsis: Shell programming, Haskell-style
Description: @turtle@ is a reimplementation of the Unix command line environment
    in Haskell so that you can use Haskell as both a shell and a scripting
    language.
    .
    Features include:
    .
    * Batteries included: Command an extended suite of predefined utilities
    .
    * Interoperability: You can still run external shell commands
    .
    * Portability: Works on Windows, OS X, and Linux
    .
    * Exception safety: Safely acquire and release resources
    .
    * Streaming: Transform or fold command output in constant space
    .
    * Patterns: Use typed regular expressions that can parse structured values
    .
    * Formatting: Type-safe @printf@-style text formatting
    .
    * Modern: Supports @text@ and @system-filepath@
    .
    Read "Turtle.Tutorial" for a detailed tutorial or "Turtle.Prelude" for a
    quick-start guide
    .
    @turtle@ is designed to be beginner-friendly, but as a result lacks certain
    features, like tracing commands.  If you feel comfortable using @turtle@
    then you should also check out the @Shelly@ library which provides similar
    functionality.
Category: System
Extra-Source-Files:
    CHANGELOG.md
Source-Repository head
    Type: git
    Location: https://github.com/Gabriel439/Haskell-Turtle-Library

Library
    HS-Source-Dirs: src
    Build-Depends:
        base                 >= 4.11    && < 5   ,
        ansi-wl-pprint       >= 0.6     && < 0.7 ,
        async                >= 2.0.0.0 && < 2.3 ,
        bytestring           >= 0.9.1.8 && < 0.11,
        clock                >= 0.4.1.2 && < 0.9 ,
        containers           >= 0.5.0.0 && < 0.7 ,
        directory            >= 1.0.7   && < 1.4 ,
        exceptions           >= 0.4     && < 0.11,
        foldl                >= 1.1     && < 1.5 ,
        hostname                           < 1.1 ,
        managed              >= 1.0.3   && < 1.1 ,
        process              >= 1.0.1.1 && < 1.7 ,
        semigroups           >= 0.5.0   && < 0.20,
        system-filepath      >= 0.3.1   && < 0.5 ,
        system-fileio        >= 0.2.1   && < 0.4 ,
        stm                                < 2.6 ,
        streaming-commons                  < 0.3 ,
        temporary                          < 1.4 ,
        text                 >= 1.0.0   && < 1.3 ,
        time                               < 1.10,
        transformers         >= 0.2.0.0 && < 0.6 ,
        optparse-applicative >= 0.13    && < 0.16,
        optional-args        >= 1.0     && < 2.0 ,
        unix-compat          >= 0.4     && < 0.6
    if os(windows)
        Build-Depends: Win32 >= 2.2.0.1 && < 2.9
    else
        Build-Depends: unix  >= 2.5.1.0 && < 2.8
    if !impl(ghc >= 8.0)
        Build-Depends: fail  >= 4.9.0.0 && < 4.10
    Exposed-Modules:
        Turtle,
        Turtle.Bytes,
        Turtle.Format,
        Turtle.Pattern,
        Turtle.Shell,
        Turtle.Options,
        Turtle.Line,
        Turtle.Prelude,
        Turtle.Tutorial
    Other-Modules:
        Turtle.Internal
    GHC-Options: -Wall
    Default-Language: Haskell2010

test-suite tests
    Type: exitcode-stdio-1.0
    HS-Source-Dirs: test
    Main-Is: Main.hs
    GHC-Options: -Wall
    Default-Language: Haskell2010
    Build-Depends:
        base    >= 4   && < 5   ,
        doctest >= 0.7 && < 0.17

test-suite regression-broken-pipe
    Type: exitcode-stdio-1.0
    HS-Source-Dirs: test
    Main-Is: RegressionBrokenPipe.hs
    GHC-Options: -Wall -threaded
    Default-Language: Haskell2010
    Build-Depends:
        base   >= 4 && < 5,
        turtle

test-suite regression-masking-exception
    Type: exitcode-stdio-1.0
    HS-Source-Dirs: test
    Main-Is: RegressionMaskingException.hs
    GHC-Options: -Wall -threaded
    Default-Language: Haskell2010
    Build-Depends:
        base   >= 4 && < 5,
        turtle

test-suite cptree
    Type: exitcode-stdio-1.0
    HS-Source-Dirs: test
    Main-Is: cptree.hs
    GHC-Options: -Wall -threaded
    Default-Language: Haskell2010
    Build-Depends:
        base   >= 4 && < 5,
        fail,
        temporary,
        system-filepath >= 0.4,
        turtle

benchmark bench
    Type: exitcode-stdio-1.0
    HS-Source-Dirs: bench
    Main-Is: Main.hs
    GHC-Options: -O2 -Wall -threaded
    Default-Language: Haskell2010
    Build-Depends:
        base      >= 4   && < 5  ,
        text                < 1.3,
        turtle
    if impl(ghc < 7.8)
        Build-Depends: criterion >= 0.4 && < 1.1.4.0
    else
        Build-Depends: criterion >= 0.4 && < 1.6

Reply via email to