@@ -1,4 +1,4 @@
2-- Module : Streamly.Unicode.Stream
2-- Module : Streamly.Unicode.Stream
3-- Copyright : (c) 2019 Composewell Technologies
3-- Copyright : (c) 2019 Composewell Technologies
4-- License : BSD-3-Clause
4-- License : BSD-3-Clause
@@ -21,16 +21,14 @@
21import Prelude hiding (last, length)
21import Prelude hiding (last, length)
22import System.IO (Handle)
22import System.IO (Handle)
24−import qualified Streamly.Data.Fold as FL
24+import qualified Streamly.Data.Array.Foreign as Array
25−import qualified Streamly.Unicode.Stream as SS
25+import qualified Streamly.Data.Fold as Fold
26−import qualified Streamly.FileSystem.Handle as FH
26+import qualified Streamly.FileSystem.Handle as Handle
27−import qualified Streamly.Internal.Data.Unfold as IUF
27+import qualified Streamly.Internal.Data.Stream.IsStream as Stream
28−import qualified Streamly.Internal.Unicode.Stream as IUS
28+import qualified Streamly.Internal.Data.Unfold as Unfold
29−import qualified Streamly.Internal.FileSystem.Handle as IFH
29+import qualified Streamly.Internal.FileSystem.Handle as Handle
30−import qualified Streamly.Internal.Unicode.Array.Char as IUA
30+import qualified Streamly.Internal.Unicode.Array.Char as UnicodeArr
31−import qualified Streamly.Internal.Data.Stream.IsStream as IP
31+import qualified Streamly.Internal.Unicode.Stream as Unicode
32−import qualified Streamly.Data.Array.Foreign as A
33−import qualified Streamly.Prelude as S
35import Gauge hiding (env)
33import Gauge hiding (env)
36import Streamly.Benchmark.Common
34import Streamly.Benchmark.Common
@@ -41,8 +39,8 @@ import Foreign.Storable (Storable)
41import Streamly.Internal.Data.Stream.StreamD.Type (Step(..))
39import Streamly.Internal.Data.Stream.StreamD.Type (Step(..))
42import qualified Streamly.Internal.Data.Fold.Type as Fold
40import qualified Streamly.Internal.Data.Fold.Type as Fold
43import qualified Streamly.Internal.Data.Tuple.Strict as Strict
41import qualified Streamly.Internal.Data.Tuple.Strict as Strict
44−import qualified Streamly.Internal.Data.Array.Foreign.Type as AT
42+import qualified Streamly.Internal.Data.Array.Foreign.Type as Array
45−import qualified Streamly.Internal.Data.Array.Foreign.Mut.Type as MA
43+import qualified Streamly.Internal.Data.Array.Foreign.Mut.Type as MArray
47import Test.Inspection
45import Test.Inspection
@@ -54,10 +52,10 @@ moduleName = "Unicode.Stream"
54{-# NOINLINE copyCodecUtf8ArraysLenient #-}
52{-# NOINLINE copyCodecUtf8ArraysLenient #-}
55copyCodecUtf8ArraysLenient :: Handle -> Handle -> IO ()
53copyCodecUtf8ArraysLenient :: Handle -> Handle -> IO ()
56copyCodecUtf8ArraysLenient inh outh =
54copyCodecUtf8ArraysLenient inh outh =
57− S.fold (FH.write outh)
55+ Stream.fold (Handle.write outh)
58− $ SS.encodeUtf8'
56+ $ Unicode.encodeUtf8'
59− $ IUS.decodeUtf8Arrays
57+ $ Unicode.decodeUtf8Arrays
60− $ IFH.toChunks inh
58+ $ Handle.toChunks inh
62#ifdef INSPECTION
60#ifdef INSPECTION
63inspect $ hasNoTypeClasses 'copyCodecUtf8ArraysLenient
61inspect $ hasNoTypeClasses 'copyCodecUtf8ArraysLenient
@@ -68,7 +66,7 @@ o_1_space_decode_encode_chunked :: BenchEnv -> [Benchmark]
68o_1_space_decode_encode_chunked env =
66o_1_space_decode_encode_chunked env =
69 [ bgroup "decode-encode/toChunks"
67 [ bgroup "decode-encode/toChunks"
71− mkBenchSmall "decodeEncodeUtf8Lenient" env $ \inH outH ->
69+ mkBenchSmall "encodeUtf8' . decodeUtf8Arrays" env $ \inH outH ->
72 copyCodecUtf8ArraysLenient inH outH
70 copyCodecUtf8ArraysLenient inH outH
@@ -80,60 +78,60 @@ o_1_space_decode_encode_chunked env =
80{-# NOINLINE linesUnlinesCopy #-}
78{-# NOINLINE linesUnlinesCopy #-}
81linesUnlinesCopy :: Handle -> Handle -> IO ()
79linesUnlinesCopy :: Handle -> Handle -> IO ()
82linesUnlinesCopy inh outh =
80linesUnlinesCopy inh outh =
83− S.fold (FH.write outh)
81+ Stream.fold (Handle.write outh)
84− $ SS.encodeLatin1'
82+ $ Unicode.encodeLatin1'
85− $ IUS.unlines IUF.fromList
83+ $ Unicode.unlines Unfold.fromList
86− $ S.splitOnSuffix (== '\n') FL.toList
84+ $ Stream.splitOnSuffix (== '\n') Fold.toList
87− $ SS.decodeLatin1
85+ $ Unicode.decodeLatin1
88− $ S.unfold FH.read inh
86+ $ Stream.unfold Handle.read inh
90{-# NOINLINE linesUnlinesArrayWord8Copy #-}
88{-# NOINLINE linesUnlinesArrayWord8Copy #-}
91linesUnlinesArrayWord8Copy :: Handle -> Handle -> IO ()
89linesUnlinesArrayWord8Copy :: Handle -> Handle -> IO ()
92linesUnlinesArrayWord8Copy inh outh =
90linesUnlinesArrayWord8Copy inh outh =
93− S.fold (FH.write outh)
91+ Stream.fold (Handle.write outh)
94− $ IP.interposeSuffix 10 A.read
92+ $ Stream.interposeSuffix 10 Array.read
95− $ S.splitOnSuffix (== 10) A.write
93+ $ Stream.splitOnSuffix (== 10) Array.write
96− $ S.unfold FH.read inh
94+ $ Stream.unfold Handle.read inh
98-- XXX splitSuffixOn requires -funfolding-use-threshold=150 for better fusion
96-- XXX splitSuffixOn requires -funfolding-use-threshold=150 for better fusion
99-- | Lines and unlines
97-- | Lines and unlines
100{-# NOINLINE linesUnlinesArrayCharCopy #-}
98{-# NOINLINE linesUnlinesArrayCharCopy #-}
101linesUnlinesArrayCharCopy :: Handle -> Handle -> IO ()
99linesUnlinesArrayCharCopy :: Handle -> Handle -> IO ()
102linesUnlinesArrayCharCopy inh outh =
100linesUnlinesArrayCharCopy inh outh =
103− S.fold (FH.write outh)
101+ Stream.fold (Handle.write outh)
104− $ SS.encodeLatin1'
102+ $ Unicode.encodeLatin1'
105− $ IUA.unlines
103+ $ UnicodeArr.unlines
106− $ IUA.lines
104+ $ UnicodeArr.lines
107− $ SS.decodeLatin1
105+ $ Unicode.decodeLatin1
108− $ S.unfold FH.read inh
106+ $ Stream.unfold Handle.read inh
110#ifdef INSPECTION
108#ifdef INSPECTION
111inspect $ hasNoTypeClassesExcept 'linesUnlinesArrayCharCopy [''Storable]
109inspect $ hasNoTypeClassesExcept 'linesUnlinesArrayCharCopy [''Storable]
112-- inspect $ 'linesUnlinesArrayCharCopy `hasNoType` ''Step
110-- inspect $ 'linesUnlinesArrayCharCopy `hasNoType` ''Step
115−-- XXX to write this we need to be able to map decodeUtf8 on the A.read fold.
113+-- XXX to write this we need to be able to map decodeUtf8 on the Array.read fold.
116-- For that we have to write decodeUtf8 as a Pipe.
114-- For that we have to write decodeUtf8 as a Pipe.
118{-# INLINE linesUnlinesArrayUtf8Copy #-}
116{-# INLINE linesUnlinesArrayUtf8Copy #-}
119linesUnlinesArrayUtf8Copy :: Handle -> Handle -> IO ()
117linesUnlinesArrayUtf8Copy :: Handle -> Handle -> IO ()
120linesUnlinesArrayUtf8Copy inh outh =
118linesUnlinesArrayUtf8Copy inh outh =
121− S.fold (FH.write outh)
119+ Stream.fold (Handle.write outh)
122− $ SS.encodeLatin1'
120+ $ Unicode.encodeLatin1'
123− $ IP.intercalate (A.fromList [10]) (pipe SS.decodeUtf8P A.read)
121+ $ Stream.intercalate (Array.fromList [10]) (pipe Unicode.decodeUtf8P Array.read)
124− $ S.splitOnSuffix (== '\n') (IFL.map SS.encodeUtf8' A.write)
122+ $ Stream.splitOnSuffix (== '\n') (IFold.map Unicode.encodeUtf8' Array.write)
125− $ SS.decodeLatin1
123+ $ Unicode.decodeLatin1
126− $ S.unfold FH.read inh
124+ $ Stream.unfold Handle.read inh
129-- | Word, unwords and copy
127-- | Word, unwords and copy
130{-# NOINLINE wordsUnwordsCopyWord8 #-}
128{-# NOINLINE wordsUnwordsCopyWord8 #-}
131wordsUnwordsCopyWord8 :: Handle -> Handle -> IO ()
129wordsUnwordsCopyWord8 :: Handle -> Handle -> IO ()
132wordsUnwordsCopyWord8 inh outh =
130wordsUnwordsCopyWord8 inh outh =
133− S.fold (FH.write outh)
131+ Stream.fold (Handle.write outh)
134− $ IP.interposeSuffix 32 IUF.fromList
132+ $ Stream.interposeSuffix 32 Unfold.fromList
135− $ S.wordsBy isSp FL.toList
133+ $ Stream.wordsBy isSp Fold.toList
136− $ S.unfold FH.read inh
134+ $ Stream.unfold Handle.read inh
138#ifdef INSPECTION
136#ifdef INSPECTION
139inspect $ hasNoTypeClasses 'wordsUnwordsCopyWord8
137inspect $ hasNoTypeClasses 'wordsUnwordsCopyWord8
@@ -144,9 +142,9 @@ inspect $ hasNoTypeClasses 'wordsUnwordsCopyWord8
144{-# NOINLINE wordsUnwordsCopy #-}
142{-# NOINLINE wordsUnwordsCopy #-}
145wordsUnwordsCopy :: Handle -> Handle -> IO ()
143wordsUnwordsCopy :: Handle -> Handle -> IO ()
146wordsUnwordsCopy inh outh =
144wordsUnwordsCopy inh outh =
147− S.fold (FH.write outh)
145+ Stream.fold (Handle.write outh)
148− $ SS.encodeLatin1'
146+ $ Unicode.encodeLatin1'
149− $ IUS.unwords IUF.fromList
147+ $ Unicode.unwords Unfold.fromList
150 -- XXX This pipeline does not fuse with wordsBy but fuses with splitOn
148 -- XXX This pipeline does not fuse with wordsBy but fuses with splitOn
151 -- with -funfolding-use-threshold=300. With wordsBy it does not fuse
149 -- with -funfolding-use-threshold=300. With wordsBy it does not fuse
152 -- even with high limits for inlining and spec-constr ghc options. With
150 -- even with high limits for inlining and spec-constr ghc options. With
@@ -154,10 +152,10 @@ wordsUnwordsCopy inh outh =
154 -- is no evidence in the core that a join point involving Step
152 -- is no evidence in the core that a join point involving Step
155 -- constructors is not getting inlined. Not being able to fuse at all in
153 -- constructors is not getting inlined. Not being able to fuse at all in
156 -- this case could be an unknown issue, need more investigation.
154 -- this case could be an unknown issue, need more investigation.
157− $ S.wordsBy isSpace FL.toList
155+ $ Stream.wordsBy isSpace Fold.toList
158− -- -- $ S.splitOn isSpace FL.toList
156+ -- -- $ Stream.splitOn isSpace Fold.toList
159− $ SS.decodeLatin1
157+ $ Unicode.decodeLatin1
160− $ S.unfold FH.read inh
158+ $ Stream.unfold Handle.read inh
162#ifdef INSPECTION
160#ifdef INSPECTION
163-- inspect $ hasNoTypeClasses 'wordsUnwordsCopy
161-- inspect $ hasNoTypeClasses 'wordsUnwordsCopy
@@ -167,28 +165,28 @@ wordsUnwordsCopy inh outh =
167{-# NOINLINE wordsUnwordsCharArrayCopy #-}
165{-# NOINLINE wordsUnwordsCharArrayCopy #-}
168wordsUnwordsCharArrayCopy :: Handle -> Handle -> IO ()
166wordsUnwordsCharArrayCopy :: Handle -> Handle -> IO ()
169wordsUnwordsCharArrayCopy inh outh =
167wordsUnwordsCharArrayCopy inh outh =
170− S.fold (FH.write outh)
168+ Stream.fold (Handle.write outh)
171− $ SS.encodeLatin1'
169+ $ Unicode.encodeLatin1'
172− $ IUA.unwords
170+ $ UnicodeArr.unwords
173− $ IUA.words
171+ $ UnicodeArr.words
174− $ SS.decodeLatin1
172+ $ Unicode.decodeLatin1
175− $ S.unfold FH.read inh
173+ $ Stream.unfold Handle.read inh
177o_1_space_copy_read_group_ungroup :: BenchEnv -> [Benchmark]
175o_1_space_copy_read_group_ungroup :: BenchEnv -> [Benchmark]
178o_1_space_copy_read_group_ungroup env =
176o_1_space_copy_read_group_ungroup env =
179 [ bgroup "ungroup-group"
177 [ bgroup "ungroup-group"
180− [ mkBenchSmall "US.unlines . S.splitOnSuffix ([Word8])" env
178+ [ mkBenchSmall "unlines . splitOnSuffix ([Word8])" env
181 $ \inh outh -> linesUnlinesCopy inh outh
179 $ \inh outh -> linesUnlinesCopy inh outh
182− , mkBenchSmall "S.interposeSuffix . S.splitOnSuffix(Array Word8)" env
180+ , mkBenchSmall "interposeSuffix . splitOnSuffix (Array Word8)" env
183 $ \inh outh -> linesUnlinesArrayWord8Copy inh outh
181 $ \inh outh -> linesUnlinesArrayWord8Copy inh outh
184− , mkBenchSmall "UA.unlines . UA.lines (Array Char)" env
182+ , mkBenchSmall "UnicodeArr.unlines . UnicodeArr.lines (Array Char)" env
185 $ \inh outh -> linesUnlinesArrayCharCopy inh outh
183 $ \inh outh -> linesUnlinesArrayCharCopy inh outh
187− , mkBenchSmall "S.interposeSuffix . S.wordsBy ([Word8])" env
185+ , mkBenchSmall "interposeSuffix . wordsBy ([Word8])" env
188 $ \inh outh -> wordsUnwordsCopyWord8 inh outh
186 $ \inh outh -> wordsUnwordsCopyWord8 inh outh
189− , mkBenchSmall "US.unwords . S.wordsBy ([Char])" env
187+ , mkBenchSmall "unwords . wordsBy ([Char])" env
190 $ \inh outh -> wordsUnwordsCopy inh outh
188 $ \inh outh -> wordsUnwordsCopy inh outh
191− , mkBenchSmall "UA.unwords . UA.words (Array Char)" env
189+ , mkBenchSmall "UnicodeArr.unwords . UnicodeArr.words (Array Char)" env
192 $ \inh outh -> wordsUnwordsCharArrayCopy inh outh
190 $ \inh outh -> wordsUnwordsCharArrayCopy inh outh
@@ -201,55 +199,55 @@ o_1_space_copy_read_group_ungroup env =
201{-# NOINLINE copyStreamLatin1' #-}
199{-# NOINLINE copyStreamLatin1' #-}
202copyStreamLatin1' :: Handle -> Handle -> IO ()
200copyStreamLatin1' :: Handle -> Handle -> IO ()
203copyStreamLatin1' inh outh =
201copyStreamLatin1' inh outh =
204− S.fold (FH.write outh)
202+ Stream.fold (Handle.write outh)
205− $ SS.encodeLatin1'
203+ $ Unicode.encodeLatin1'
206− $ SS.decodeLatin1
204+ $ Unicode.decodeLatin1
207− $ S.unfold FH.read inh
205+ $ Stream.unfold Handle.read inh
209#ifdef INSPECTION
207#ifdef INSPECTION
210inspect $ hasNoTypeClasses 'copyStreamLatin1'
208inspect $ hasNoTypeClasses 'copyStreamLatin1'
211inspect $ 'copyStreamLatin1' `hasNoType` ''Step
209inspect $ 'copyStreamLatin1' `hasNoType` ''Step
212−inspect $ 'copyStreamLatin1' `hasNoType` ''IUF.ConcatState -- FH.read/UF.many
210+inspect $ 'copyStreamLatin1' `hasNoType` ''Unfold.ConcatState -- Handle.read/UF.many
213−inspect $ 'copyStreamLatin1' `hasNoType` ''MA.ReadUState -- FH.read/A.read
211+inspect $ 'copyStreamLatin1' `hasNoType` ''MArray.ReadUState -- Handle.read/Array.read
215inspect $ 'copyStreamLatin1' `hasNoType` ''Fold.Step
213inspect $ 'copyStreamLatin1' `hasNoType` ''Fold.Step
216−inspect $ 'copyStreamLatin1' `hasNoType` ''AT.ArrayUnsafe -- FH.write/writeNUnsafe
214+inspect $ 'copyStreamLatin1' `hasNoType` ''Array.ArrayUnsafe -- Handle.write/writeNUnsafe
217−inspect $ 'copyStreamLatin1' `hasNoType` ''Strict.Tuple3' -- FH.write/chunksOf
215+inspect $ 'copyStreamLatin1' `hasNoType` ''Strict.Tuple3' -- Handle.write/chunksOf
220-- | Copy file (encodeLatin1)
218-- | Copy file (encodeLatin1)
221{-# NOINLINE copyStreamLatin1 #-}
219{-# NOINLINE copyStreamLatin1 #-}
222copyStreamLatin1 :: Handle -> Handle -> IO ()
220copyStreamLatin1 :: Handle -> Handle -> IO ()
223copyStreamLatin1 inh outh =
221copyStreamLatin1 inh outh =
224− S.fold (FH.write outh)
222+ Stream.fold (Handle.write outh)
225− $ SS.encodeLatin1
223+ $ Unicode.encodeLatin1
226− $ SS.decodeLatin1
224+ $ Unicode.decodeLatin1
227− $ S.unfold FH.read inh
225+ $ Stream.unfold Handle.read inh
229#ifdef INSPECTION
227#ifdef INSPECTION
230inspect $ hasNoTypeClasses 'copyStreamLatin1
228inspect $ hasNoTypeClasses 'copyStreamLatin1
231inspect $ 'copyStreamLatin1 `hasNoType` ''Step
229inspect $ 'copyStreamLatin1 `hasNoType` ''Step
232−inspect $ 'copyStreamLatin1 `hasNoType` ''IUF.ConcatState -- FH.read/UF.many
230+inspect $ 'copyStreamLatin1 `hasNoType` ''Unfold.ConcatState -- Handle.read/UF.many
233−inspect $ 'copyStreamLatin1 `hasNoType` ''MA.ReadUState -- FH.read/A.read
231+inspect $ 'copyStreamLatin1 `hasNoType` ''MArray.ReadUState -- Handle.read/Array.read
235inspect $ 'copyStreamLatin1 `hasNoType` ''Fold.ManyState
233inspect $ 'copyStreamLatin1 `hasNoType` ''Fold.ManyState
236inspect $ 'copyStreamLatin1 `hasNoType` ''Fold.Step
234inspect $ 'copyStreamLatin1 `hasNoType` ''Fold.Step
237−inspect $ 'copyStreamLatin1 `hasNoType` ''AT.ArrayUnsafe -- FH.write/writeNUnsafe
235+inspect $ 'copyStreamLatin1 `hasNoType` ''Array.ArrayUnsafe -- Handle.write/writeNUnsafe
238−inspect $ 'copyStreamLatin1 `hasNoType` ''Strict.Tuple3' -- FH.write/chunksOf
236+inspect $ 'copyStreamLatin1 `hasNoType` ''Strict.Tuple3' -- Handle.write/chunksOf
241-- | Copy file
239-- | Copy file
242_copyStreamUtf8' :: Handle -> Handle -> IO ()
240_copyStreamUtf8' :: Handle -> Handle -> IO ()
243_copyStreamUtf8' inh outh =
241_copyStreamUtf8' inh outh =
244− S.fold (FH.write outh)
242+ Stream.fold (Handle.write outh)
245− $ SS.encodeUtf8'
243+ $ Unicode.encodeUtf8'
246− $ SS.decodeUtf8'
244+ $ Unicode.decodeUtf8'
247− $ S.unfold FH.read inh
245+ $ Stream.unfold Handle.read inh
249#ifdef INSPECTION
247#ifdef INSPECTION
250inspect $ hasNoTypeClasses '_copyStreamUtf8'
248inspect $ hasNoTypeClasses '_copyStreamUtf8'
251-- inspect $ '_copyStreamUtf8 `hasNoType` ''Step
249-- inspect $ '_copyStreamUtf8 `hasNoType` ''Step
252−-- inspect $ '_copyStreamUtf8 `hasNoType` ''AT.FlattenState
250+-- inspect $ '_copyStreamUtf8 `hasNoType` ''Array.FlattenState
253-- inspect $ '_copyStreamUtf8 `hasNoType` ''D.ConcatMapUState
251-- inspect $ '_copyStreamUtf8 `hasNoType` ''D.ConcatMapUState
@@ -257,15 +255,15 @@ inspect $ hasNoTypeClasses '_copyStreamUtf8'
257{-# NOINLINE copyStreamUtf8 #-}
255{-# NOINLINE copyStreamUtf8 #-}
258copyStreamUtf8 :: Handle -> Handle -> IO ()
256copyStreamUtf8 :: Handle -> Handle -> IO ()
259copyStreamUtf8 inh outh =
257copyStreamUtf8 inh outh =
260− S.fold (FH.write outh)
258+ Stream.fold (Handle.write outh)
261− $ SS.encodeUtf8
259+ $ Unicode.encodeUtf8
262− $ SS.decodeUtf8
260+ $ Unicode.decodeUtf8
263− $ S.unfold FH.read inh
261+ $ Stream.unfold Handle.read inh
265#ifdef INSPECTION
263#ifdef INSPECTION
266inspect $ hasNoTypeClasses 'copyStreamUtf8
264inspect $ hasNoTypeClasses 'copyStreamUtf8
267-- inspect $ 'copyStreamUtf8Lax `hasNoType` ''Step
265-- inspect $ 'copyStreamUtf8Lax `hasNoType` ''Step
268−-- inspect $ 'copyStreamUtf8Lax `hasNoType` ''AT.FlattenState
266+-- inspect $ 'copyStreamUtf8Lax `hasNoType` ''Array.FlattenState
269-- inspect $ 'copyStreamUtf8Lax `hasNoType` ''D.ConcatMapUState
267-- inspect $ 'copyStreamUtf8Lax `hasNoType` ''D.ConcatMapUState
@@ -274,15 +272,16 @@ o_1_space_decode_encode_read env =
274 [ bgroup "decode-encode"
272 [ bgroup "decode-encode"
276 -- This needs an ascii file, as decode just errors out.
274 -- This needs an ascii file, as decode just errors out.
277− mkBench "SS.encodeLatin1' . SS.decodeLatin1" env $ \inh outh ->
275+ mkBench "encodeLatin1' . decodeLatin1" env $ \inh outh ->
278 copyStreamLatin1' inh outh
276 copyStreamLatin1' inh outh
279− , mkBench "SS.encodeLatin1 . SS.decodeLatin1" env $ \inh outh ->
277+ , mkBench "encodeLatin1 . decodeLatin1" env $ \inh outh ->
280 copyStreamLatin1 inh outh
278 copyStreamLatin1 inh outh
281#ifdef DEVBUILD
279#ifdef DEVBUILD
280+ -- Requires valid unicode input
282− , mkBench "copyUtf8" env $ \inh outh ->
281+ , mkBench "encodeUtf8' . decodeUtf8'" env $ \inh outh ->
283 _copyStreamUtf8' inh outh
282 _copyStreamUtf8' inh outh
285− , mkBenchSmall "SS.encodeUtf8 . SS.decodeUtf8Lax" env $ \inh outh ->
284+ , mkBenchSmall "encodeUtf8 . decodeUtf8" env $ \inh outh ->
286 copyStreamUtf8 inh outh
285 copyStreamUtf8 inh outh
@@ -296,7 +295,7 @@ main = do
298 allBenchmarks env =
297 allBenchmarks env =
299− [ bgroup (o_1_space_prefix moduleName) $ Prelude.concat $
298+ [ bgroup (o_1_space_prefix moduleName) $ Prelude.concat
300 [ o_1_space_copy_read_group_ungroup env
299 [ o_1_space_copy_read_group_ungroup env
301 , o_1_space_decode_encode_chunked env
300 , o_1_space_decode_encode_chunked env
302 , o_1_space_decode_encode_read env
301 , o_1_space_decode_encode_read env