on master help sign in
rename FileSystem.File module to FileSystem.Handle
606fe9dHarendra Kumar
benchmark/FileIO.hs+31−31
@@ -15,7 +15,7 @@ import System.Process.Typed (shell, runProcess_)
15import Data.IORef
15import Data.IORef
16import Gauge
16import Gauge
17
17
18−import qualified Streamly.FileSystem.File as File
18+import qualified Streamly.FileSystem.Handle as FH
19import qualified Streamly.Mem.Array as A
19import qualified Streamly.Mem.Array as A
20import qualified Streamly.Prelude as S
20import qualified Streamly.Prelude as S
21
21
@@ -91,7 +91,7 @@ main = do
91 [ bgroup "readArray"
91 [ bgroup "readArray"
92 [ mkBench "last" href $ do
92 [ mkBench "last" href $ do
93 Handles inh _ <- readIORef href
93 Handles inh _ <- readIORef href
94− let s = File.readArrays inh
94+ let s = FH.readArrays inh
95 larr <- S.last s
95 larr <- S.last s
96 return $ case larr of
96 return $ case larr of
97 Nothing -> Nothing
97 Nothing -> Nothing
@@ -101,53 +101,53 @@ main = do
101 -- and counting characters.
101 -- and counting characters.
102 , mkBench "length (bytecount)" href $ do
102 , mkBench "length (bytecount)" href $ do
103 Handles inh _ <- readIORef href
103 Handles inh _ <- readIORef href
104− let s = File.readArrays inh
104+ let s = FH.readArrays inh
105 S.sum (S.map A.length s)
105 S.sum (S.map A.length s)
106 , mkBench "sum" href $ do
106 , mkBench "sum" href $ do
107 let foldlArr' f z = runIdentity . S.foldl' f z . A.read
107 let foldlArr' f z = runIdentity . S.foldl' f z . A.read
108 Handles inh _ <- readIORef href
108 Handles inh _ <- readIORef href
109− let s = File.readArrays inh
109+ let s = FH.readArrays inh
110 S.foldl' (\acc arr -> acc + foldlArr' (+) 0 arr) 0 s
110 S.foldl' (\acc arr -> acc + foldlArr' (+) 0 arr) 0 s
111 ]
111 ]
112 , bgroup "readStream"
112 , bgroup "readStream"
113 [ mkBench "last" href $ do
113 [ mkBench "last" href $ do
114 Handles inh _ <- readIORef href
114 Handles inh _ <- readIORef href
115− S.last $ File.read inh
115+ S.last $ FH.read inh
116 , mkBench "length (bytecount)" href $ do
116 , mkBench "length (bytecount)" href $ do
117 Handles inh _ <- readIORef href
117 Handles inh _ <- readIORef href
118− S.length $ File.read inh
118+ S.length $ FH.read inh
119 , mkBench "sum" href $ do
119 , mkBench "sum" href $ do
120 Handles inh _ <- readIORef href
120 Handles inh _ <- readIORef href
121− S.sum $ File.read inh
121+ S.sum $ FH.read inh
122 ]
122 ]
123 , bgroup "copyArray"
123 , bgroup "copyArray"
124 [ mkBench "copy" href $ do
124 [ mkBench "copy" href $ do
125 Handles inh outh <- readIORef href
125 Handles inh outh <- readIORef href
126− let s = File.readArrays inh
126+ let s = FH.readArrays inh
127− File.writeArrays outh s
127+ FH.writeArrays outh s
128 ]
128 ]
129#ifdef DEVBUILD
129#ifdef DEVBUILD
130 -- This takes a little longer therefore put under the dev conditional
130 -- This takes a little longer therefore put under the dev conditional
131 , bgroup "copyStream"
131 , bgroup "copyStream"
132 [ mkBench "fromToHandle" href $ do
132 [ mkBench "fromToHandle" href $ do
133 Handles inh outh <- readIORef href
133 Handles inh outh <- readIORef href
134− File.write outh (File.read inh)
134+ FH.write outh (FH.read inh)
135 ]
135 ]
136 , bgroup "grouping"
136 , bgroup "grouping"
137 [ mkBench "chunksOf 1 (toArray)" href $ do
137 [ mkBench "chunksOf 1 (toArray)" href $ do
138 Handles inh _ <- readIORef href
138 Handles inh _ <- readIORef href
139 S.length $ FL.chunksOf fileSize (A.toArrayN fileSize)
139 S.length $ FL.chunksOf fileSize (A.toArrayN fileSize)
140− (File.read inh)
140+ (FH.read inh)
141
141
142 , mkBench "chunksOf 1" href $ do
142 , mkBench "chunksOf 1" href $ do
143 Handles inh _ <- readIORef href
143 Handles inh _ <- readIORef href
144− S.length $ FL.chunksOf 1 FL.drain (File.read inh)
144+ S.length $ FL.chunksOf 1 FL.drain (FH.read inh)
145 , mkBench "chunksOf 10" href $ do
145 , mkBench "chunksOf 10" href $ do
146 Handles inh _ <- readIORef href
146 Handles inh _ <- readIORef href
147− S.length $ FL.chunksOf 10 FL.drain (File.read inh)
147+ S.length $ FL.chunksOf 10 FL.drain (FH.read inh)
148 , mkBench "chunksOf 1000" href $ do
148 , mkBench "chunksOf 1000" href $ do
149 Handles inh _ <- readIORef href
149 Handles inh _ <- readIORef href
150− S.length $ FL.chunksOf 1000 FL.drain (File.read inh)
150+ S.length $ FL.chunksOf 1000 FL.drain (FH.read inh)
151 ]
151 ]
152
152
153 , let lf = fromIntegral (ord '\n')
153 , let lf = fromIntegral (ord '\n')
@@ -158,66 +158,66 @@ main = do
158 [ bgroup "predicate"
158 [ bgroup "predicate"
159 [ mkBenchText "splitBy \\n (line count)" inText $ do
159 [ mkBenchText "splitBy \\n (line count)" inText $ do
160 (S.length $ FL.splitBy (== lf) FL.drain
160 (S.length $ FL.splitBy (== lf) FL.drain
161− $ File.read inText) >>= print
161+ $ FH.read inText) >>= print
162 , mkBenchText "splitSuffixBy \\n (line count)" inText $ do
162 , mkBenchText "splitSuffixBy \\n (line count)" inText $ do
163 (S.length $ FL.splitSuffixBy (== lf) FL.drain
163 (S.length $ FL.splitSuffixBy (== lf) FL.drain
164− $ File.read inText) >>= print
164+ $ FH.read inText) >>= print
165 , mkBenchText "wordsBy isSpace (word count)" inText $ do
165 , mkBenchText "wordsBy isSpace (word count)" inText $ do
166 (S.length $ FL.wordsBy isSp FL.drain
166 (S.length $ FL.wordsBy isSp FL.drain
167− $ File.read inText) >>= print
167+ $ FH.read inText) >>= print
168 ]
168 ]
169
169
170 , bgroup "empty-pattern"
170 , bgroup "empty-pattern"
171 [ mkBenchText "splitOn \"\"" inText $ do
171 [ mkBenchText "splitOn \"\"" inText $ do
172 (S.length $ FL.splitOn (A.fromList []) FL.drain
172 (S.length $ FL.splitOn (A.fromList []) FL.drain
173− $ File.read inText) >>= print
173+ $ FH.read inText) >>= print
174 , mkBenchText "splitSuffixOn \"\"" inText $ do
174 , mkBenchText "splitSuffixOn \"\"" inText $ do
175 (S.length $ FL.splitSuffixOn (A.fromList []) FL.drain
175 (S.length $ FL.splitSuffixOn (A.fromList []) FL.drain
176− $ File.read inText) >>= print
176+ $ FH.read inText) >>= print
177 ]
177 ]
178 , bgroup "short-pattern"
178 , bgroup "short-pattern"
179 [ mkBenchText "splitOn \\n (line count)" inText $ do
179 [ mkBenchText "splitOn \\n (line count)" inText $ do
180 (S.length $ FL.splitOn lfarr FL.drain
180 (S.length $ FL.splitOn lfarr FL.drain
181− $ File.read inText) >>= print
181+ $ FH.read inText) >>= print
182 , mkBenchText "splitSuffixOn \\n (line count)" inText $ do
182 , mkBenchText "splitSuffixOn \\n (line count)" inText $ do
183 (S.length $ FL.splitSuffixOn lfarr FL.drain
183 (S.length $ FL.splitSuffixOn lfarr FL.drain
184− $ File.read inText) >>= print
184+ $ FH.read inText) >>= print
185 , mkBenchText "splitOn a" inText $ do
185 , mkBenchText "splitOn a" inText $ do
186 (S.length $ FL.splitOn (toarr "a") FL.drain
186 (S.length $ FL.splitOn (toarr "a") FL.drain
187− $ File.read inText) >>= print
187+ $ FH.read inText) >>= print
188 , mkBenchText "splitOn \\r\\n" inText $ do
188 , mkBenchText "splitOn \\r\\n" inText $ do
189 (S.length $ FL.splitOn (toarr "\r\n") FL.drain
189 (S.length $ FL.splitOn (toarr "\r\n") FL.drain
190− $ File.read inText) >>= print
190+ $ FH.read inText) >>= print
191 , mkBenchText "splitSuffixOn \\r\\n)" inText $ do
191 , mkBenchText "splitSuffixOn \\r\\n)" inText $ do
192 (S.length $ FL.splitSuffixOn (toarr "\r\n") FL.drain
192 (S.length $ FL.splitSuffixOn (toarr "\r\n") FL.drain
193− $ File.read inText) >>= print
193+ $ FH.read inText) >>= print
194 , mkBenchText "splitOn aa" inText $ do
194 , mkBenchText "splitOn aa" inText $ do
195 (S.length $ FL.splitOn (toarr "aa") FL.drain
195 (S.length $ FL.splitOn (toarr "aa") FL.drain
196− $ File.read inText) >>= print
196+ $ FH.read inText) >>= print
197 , mkBenchText "splitOn aaaa" inText $ do
197 , mkBenchText "splitOn aaaa" inText $ do
198 (S.length $ FL.splitOn (toarr "aaaa") FL.drain
198 (S.length $ FL.splitOn (toarr "aaaa") FL.drain
199− $ File.read inText) >>= print
199+ $ FH.read inText) >>= print
200 , mkBenchText "splitOn abcdefgh" inText $ do
200 , mkBenchText "splitOn abcdefgh" inText $ do
201 (S.length $ FL.splitOn (toarr "abcdefgh") FL.drain
201 (S.length $ FL.splitOn (toarr "abcdefgh") FL.drain
202− $ File.read inText) >>= print
202+ $ FH.read inText) >>= print
203 ]
203 ]
204 , bgroup "long-pattern"
204 , bgroup "long-pattern"
205 [ mkBenchText "splitOn abcdefghi" inText $ do
205 [ mkBenchText "splitOn abcdefghi" inText $ do
206 (S.length $ FL.splitOn (toarr "abcdefghi") FL.drain
206 (S.length $ FL.splitOn (toarr "abcdefghi") FL.drain
207− $ File.read inText) >>= print
207+ $ FH.read inText) >>= print
208 , mkBenchText "splitOn catcatcatcatcat" inText $ do
208 , mkBenchText "splitOn catcatcatcatcat" inText $ do
209 (S.length $ FL.splitOn (toarr "catcatcatcatcat") FL.drain
209 (S.length $ FL.splitOn (toarr "catcatcatcatcat") FL.drain
210− $ File.read inText) >>= print
210+ $ FH.read inText) >>= print
211 , mkBenchText "splitOn abc...xyz" inText $ do
211 , mkBenchText "splitOn abc...xyz" inText $ do
212 (S.length $ FL.splitOn
212 (S.length $ FL.splitOn
213 (toarr "abcdefghijklmnopqrstuvwxyz")
213 (toarr "abcdefghijklmnopqrstuvwxyz")
214 FL.drain
214 FL.drain
215− $ File.read inText) >>= print
215+ $ FH.read inText) >>= print
216 , mkBenchText "splitSuffixOn abc...xyz" inText $ do
216 , mkBenchText "splitSuffixOn abc...xyz" inText $ do
217 (S.length $ FL.splitSuffixOn
217 (S.length $ FL.splitSuffixOn
218 (toarr "abcdefghijklmnopqrstuvwxyz")
218 (toarr "abcdefghijklmnopqrstuvwxyz")
219 FL.drain
219 FL.drain
220− $ File.read inText) >>= print
220+ $ FH.read inText) >>= print
221 ]
221 ]
222 ]
222 ]
223#endif
223#endif
benchmark/NanoBenchmarks.hs+2−2
@@ -10,7 +10,7 @@ import Streamly (SerialT)
10import Streamly.SVar (MonadAsync)
10import Streamly.SVar (MonadAsync)
11
11
12import qualified Streamly.Mem.Array as A
12import qualified Streamly.Mem.Array as A
13−import qualified Streamly.FileSystem.File as File
13+import qualified Streamly.FileSystem.Handle as FH
14import qualified Streamly.Fold as FL
14import qualified Streamly.Fold as FL
15import qualified Streamly.Prelude as S
15import qualified Streamly.Prelude as S
16import qualified Streamly.Streams.StreamK as K
16import qualified Streamly.Streams.StreamK as K
@@ -112,7 +112,7 @@ main = do
112 defaultMain [mkBenchText "splitOn abc...xyz" inText $ do
112 defaultMain [mkBenchText "splitOn abc...xyz" inText $ do
113 (S.length $ FL.splitOn (A.fromList $ map (fromIntegral . ord)
113 (S.length $ FL.splitOn (A.fromList $ map (fromIntegral . ord)
114 "abcdefghijklmnopqrstuvwxyz") FL.drain
114 "abcdefghijklmnopqrstuvwxyz") FL.drain
115− $ File.read inText) >>= print
115+ $ FH.read inText) >>= print
116 ]
116 ]
117 where
117 where
118
118
src/Streamly/FileSystem/File.hs → src/Streamly/FileSystem/Handle.hsrenamed+13−16
@@ -7,7 +7,7 @@
7#include "inline.hs"
7#include "inline.hs"
8
8
9-- |
9-- |
10−-- Module : Streamly.FileSystem.File
10+-- Module : Streamly.FileSystem.Handle
11-- Copyright : (c) 2018 Harendra Kumar
11-- Copyright : (c) 2018 Harendra Kumar
12--
12--
13-- License : BSD3
13-- License : BSD3
@@ -15,19 +15,20 @@
15-- Stability : experimental
15-- Stability : experimental
16-- Portability : GHC
16-- Portability : GHC
17--
17--
18−-- Read and write streams and arrays to and from files. File IO APIs are quite
18+-- Read and write streams and arrays to and from file handles. File handle IO
19−-- similar to "Streamly.Mem.Array" read write APIs. In that regard, arrays can
19+-- APIs are quite similar to "Streamly.Mem.Array" read write APIs. In that
20−-- be considered as in-memory files or files can be considered as on-disk
20+-- regard, arrays can be considered as in-memory files or files can be
21−-- arrays. IO APIs are divided into two categories, sequential streaming IO
21+-- considered as on-disk arrays. IO APIs are divided into two categories,
22−-- APIs and random access IO APIs. Control over the file reading and writing
22+-- sequential streaming IO APIs and random access IO APIs. Control over the
23−-- behavior in terms of buffering, encoding, decoding is in the hands of the
23+-- file reading and writing behavior in terms of buffering, encoding, decoding
24−-- programmer, the 'TextEncoding', 'NewLineMode', and 'Buffering' options of
24+-- is in the hands of the programmer, the 'TextEncoding', 'NewLineMode', and
25−-- the underlying handle provided by GHC are not needed and ignored.
25+-- 'Buffering' options of the underlying handle provided by GHC are not needed
26+-- and ignored.
26--
27--
27−-- > import qualified Streamly.FileSystem.File as File
28+-- > import qualified Streamly.FileSystem.Handle as FH
28--
29--
29
30
30−module Streamly.FileSystem.File
31+module Streamly.FileSystem.Handle
31 (
32 (
32 -- * Streaming IO
33 -- * Streaming IO
33 -- | Stream data to or from a file or device sequentially. When reading,
34 -- | Stream data to or from a file or device sequentially. When reading,
@@ -47,11 +48,7 @@ module Streamly.FileSystem.File
47 -- Devices like terminals, pipes, sockets and fifos do not have random
48 -- Devices like terminals, pipes, sockets and fifos do not have random
48 -- access capability.
49 -- access capability.
49
50
50− -- TODO file path based APIs
51− -- , readFile
52− -- , writeFile
53−
54− -- ** Read File to Stream
51+ -- ** Read Handle to Stream
55 read
52 read
56 -- , readUtf8
53 -- , readUtf8
57 -- , readLines
54 -- , readLines
streamly.cabal+101−101
@@ -215,7 +215,7 @@ library
215
215
216 -- IO devices
216 -- IO devices
217 , Streamly.Mem.Array
217 , Streamly.Mem.Array
218− , Streamly.FileSystem.File
218+ , Streamly.FileSystem.Handle
219 , Streamly.Network.Socket
219 , Streamly.Network.Socket
220
220
221 -- Time
221 -- Time
@@ -538,40 +538,40 @@ benchmark linear-async
538 if impl(ghc < 8.0)
538 if impl(ghc < 8.0)
539 build-depends:
539 build-depends:
540 transformers >= 0.4 && < 0.6
540 transformers >= 0.4 && < 0.6
541−--
541+
542−-- benchmark linear-rate
542+benchmark linear-rate
543−-- type: exitcode-stdio-1.0
543+ type: exitcode-stdio-1.0
544−-- hs-source-dirs: benchmark
544+ hs-source-dirs: benchmark
545−-- main-is: LinearRate.hs
545+ main-is: LinearRate.hs
546−-- other-modules: LinearOps
546+ other-modules: LinearOps
547−-- default-language: Haskell2010
547+ default-language: Haskell2010
548−-- ghc-options: -O2 -Wall -fspec-constr-recursive=10 -with-rtsopts "-T"
548+ ghc-options: -O2 -Wall -fspec-constr-recursive=10 -with-rtsopts "-T"
549−--
549+
550−-- if flag(has-llvm)
550+ if flag(has-llvm)
551−-- ghc-options: -fllvm
551+ ghc-options: -fllvm
552−--
552+
553−-- if flag(dev)
553+ if flag(dev)
554−-- ghc-options: -Wmissed-specialisations
554+ ghc-options: -Wmissed-specialisations
555−-- -Wall-missed-specialisations
555+ -Wall-missed-specialisations
556−-- -fno-ignore-asserts
556+ -fno-ignore-asserts
557−-- if impl(ghc >= 8.0)
557+ if impl(ghc >= 8.0)
558−-- ghc-options: -Wcompat
558+ ghc-options: -Wcompat
559−-- -Wunrecognised-warning-flags
559+ -Wunrecognised-warning-flags
560−-- -Widentities
560+ -Widentities
561−-- -Wincomplete-record-updates
561+ -Wincomplete-record-updates
562−-- -Wincomplete-uni-patterns
562+ -Wincomplete-uni-patterns
563−-- -Wredundant-constraints
563+ -Wredundant-constraints
564−-- -Wnoncanonical-monad-instances
564+ -Wnoncanonical-monad-instances
565−-- -Wnoncanonical-monadfail-instances
565+ -Wnoncanonical-monadfail-instances
566−-- build-depends:
566+ build-depends:
567−-- streamly
567+ streamly
568−-- , base >= 4.8 && < 5
568+ , base >= 4.8 && < 5
569−-- , deepseq >= 1.4.3 && < 1.5
569+ , deepseq >= 1.4.3 && < 1.5
570−-- , random >= 1.0 && < 2.0
570+ , random >= 1.0 && < 2.0
571−-- , gauge >= 0.2.4 && < 0.3
571+ , gauge >= 0.2.4 && < 0.3
572−-- if impl(ghc < 8.0)
572+ if impl(ghc < 8.0)
573−-- build-depends:
573+ build-depends:
574−-- transformers >= 0.4 && < 0.6
574+ transformers >= 0.4 && < 0.6
575
575
576benchmark nested
576benchmark nested
577 type: exitcode-stdio-1.0
577 type: exitcode-stdio-1.0
@@ -608,72 +608,72 @@ benchmark nested
608 build-depends:
608 build-depends:
609 transformers >= 0.4 && < 0.6
609 transformers >= 0.4 && < 0.6
610
610
611−-- benchmark array
611+benchmark array
612−-- type: exitcode-stdio-1.0
612+ type: exitcode-stdio-1.0
613−-- hs-source-dirs: benchmark
613+ hs-source-dirs: benchmark
614−-- main-is: Array.hs
614+ main-is: Array.hs
615−-- other-modules: ArrayOps
615+ other-modules: ArrayOps
616−-- default-language: Haskell2010
616+ default-language: Haskell2010
617−-- ghc-options: -O2 -Wall -with-rtsopts "-T" -fspec-constr-recursive=10
617+ ghc-options: -O2 -Wall -with-rtsopts "-T" -fspec-constr-recursive=10
618−--
618+
619−-- if flag(has-llvm)
619+ if flag(has-llvm)
620−-- ghc-options: -fllvm
620+ ghc-options: -fllvm
621−--
621+
622−-- if flag(dev)
622+ if flag(dev)
623−-- cpp-options: -DDEVBUILD
623+ cpp-options: -DDEVBUILD
624−-- ghc-options: -Wmissed-specialisations
624+ ghc-options: -Wmissed-specialisations
625−-- -Wall-missed-specialisations
625+ -Wall-missed-specialisations
626−-- -fno-ignore-asserts
626+ -fno-ignore-asserts
627−-- if impl(ghc >= 8.0)
627+ if impl(ghc >= 8.0)
628−-- ghc-options: -Wcompat
628+ ghc-options: -Wcompat
629−-- -Wunrecognised-warning-flags
629+ -Wunrecognised-warning-flags
630−-- -Widentities
630+ -Widentities
631−-- -Wincomplete-record-updates
631+ -Wincomplete-record-updates
632−-- -Wincomplete-uni-patterns
632+ -Wincomplete-uni-patterns
633−-- -Wredundant-constraints
633+ -Wredundant-constraints
634−-- -Wnoncanonical-monad-instances
634+ -Wnoncanonical-monad-instances
635−-- -Wnoncanonical-monadfail-instances
635+ -Wnoncanonical-monadfail-instances
636−-- build-depends:
636+ build-depends:
637−-- streamly
637+ streamly
638−-- , base >= 4.8 && < 5
638+ , base >= 4.8 && < 5
639−-- , deepseq >= 1.4.3 && < 1.5
639+ , deepseq >= 1.4.3 && < 1.5
640−-- , random >= 1.0 && < 2.0
640+ , random >= 1.0 && < 2.0
641−-- , gauge >= 0.2.4 && < 0.3
641+ , gauge >= 0.2.4 && < 0.3
642−-- if impl(ghc < 8.0)
642+ if impl(ghc < 8.0)
643−-- build-depends:
643+ build-depends:
644−-- transformers >= 0.4 && < 0.6
644+ transformers >= 0.4 && < 0.6
645−--
645+
646−-- benchmark fileio
646+benchmark fileio
647−-- type: exitcode-stdio-1.0
647+ type: exitcode-stdio-1.0
648−-- hs-source-dirs: benchmark
648+ hs-source-dirs: benchmark
649−-- main-is: FileIO.hs
649+ main-is: FileIO.hs
650−-- default-language: Haskell2010
650+ default-language: Haskell2010
651−-- ghc-options: -O2 -Wall -fspec-constr-recursive=10 -with-rtsopts "-T"
651+ ghc-options: -O2 -Wall -fspec-constr-recursive=10 -with-rtsopts "-T"
652−--
652+
653−-- if flag(has-llvm)
653+ if flag(has-llvm)
654−-- ghc-options: -fllvm
654+ ghc-options: -fllvm
655−--
655+
656−-- if flag(dev)
656+ if flag(dev)
657−-- cpp-options: -DDEVBUILD
657+ cpp-options: -DDEVBUILD
658−-- ghc-options: -Wmissed-specialisations
658+ ghc-options: -Wmissed-specialisations
659−-- -Wall-missed-specialisations
659+ -Wall-missed-specialisations
660−-- -fno-ignore-asserts
660+ -fno-ignore-asserts
661−-- if impl(ghc >= 8.0)
661+ if impl(ghc >= 8.0)
662−-- ghc-options: -Wcompat
662+ ghc-options: -Wcompat
663−-- -Wunrecognised-warning-flags
663+ -Wunrecognised-warning-flags
664−-- -Widentities
664+ -Widentities
665−-- -Wincomplete-record-updates
665+ -Wincomplete-record-updates
666−-- -Wincomplete-uni-patterns
666+ -Wincomplete-uni-patterns
667−-- -Wredundant-constraints
667+ -Wredundant-constraints
668−-- -Wnoncanonical-monad-instances
668+ -Wnoncanonical-monad-instances
669−-- -Wnoncanonical-monadfail-instances
669+ -Wnoncanonical-monadfail-instances
670−-- build-depends:
670+ build-depends:
671−-- streamly
671+ streamly
672−-- , base >= 4.8 && < 5
672+ , base >= 4.8 && < 5
673−-- , gauge >= 0.2.4 && < 0.3
673+ , gauge >= 0.2.4 && < 0.3
674−-- , typed-process >= 0.2.3 && < 0.3
674+ , typed-process >= 0.2.3 && < 0.3
675−-- , deepseq >= 1.4.3 && < 1.5
675+ , deepseq >= 1.4.3 && < 1.5
676−--
676+
677-------------------------------------------------------------------------------
677-------------------------------------------------------------------------------
678-- Internal benchmarks for unexposed modules
678-- Internal benchmarks for unexposed modules
679-------------------------------------------------------------------------------
679-------------------------------------------------------------------------------