@@ -148,26 +148,23 @@ distribute = IP.fold (FL.distribute [FL.sum, FL.length])
148-- Partitioning
148-- Partitioning
149-------------------------------------------------------------------------------
149-------------------------------------------------------------------------------
151+{-# INLINE oddEven #-}
152+oddEven :: Int -> Either Int Int
153+oddEven x = if odd x then Left x else Right x
151{-# INLINE partition #-}
155{-# INLINE partition #-}
152partition :: Monad m => SerialT m Int -> m (Int, Int)
156partition :: Monad m => SerialT m Int -> m (Int, Int)
158− in IP.fold $ FL.lmap f (FL.partition FL.sum FL.length)
157+partition = IP.fold $ FL.lmap oddEven (FL.partition FL.sum FL.length)
160{-# INLINE partitionByFstM #-}
159{-# INLINE partitionByFstM #-}
161partitionByFstM :: Monad m => SerialT m Int -> m (Int, Int)
160partitionByFstM :: Monad m => SerialT m Int -> m (Int, Int)
162−partitionByFstM = do
161+partitionByFstM =
163− let f x = if odd x then return (Left x) else return (Right x)
164− IP.fold (FL.partitionByFstM f FL.length FL.length)
162+ IP.fold (FL.partitionByFstM (return . oddEven) FL.sum FL.length)
166{-# INLINE partitionByMinM #-}
164{-# INLINE partitionByMinM #-}
167partitionByMinM :: Monad m => SerialT m Int -> m (Int, Int)
165partitionByMinM :: Monad m => SerialT m Int -> m (Int, Int)
168−partitionByMinM = do
166+partitionByMinM =
169− let f x = if odd x then return (Left x) else return (Right x)
170− IP.fold (FL.partitionByMinM f FL.length FL.length)
167+ IP.fold (FL.partitionByMinM (return . oddEven) FL.sum FL.length)
172{-# INLINE demuxWith #-}
169{-# INLINE demuxWith #-}
173demuxWith ::
170demuxWith ::
@@ -203,13 +200,13 @@ unzip = IP.fold $ FL.lmap (\a -> (a, a)) (FL.unzip FL.sum FL.length)
203{-# INLINE unzipWithFstM #-}
200{-# INLINE unzipWithFstM #-}
204unzipWithFstM :: Monad m => SerialT m Int -> m (Int, Int)
201unzipWithFstM :: Monad m => SerialT m Int -> m (Int, Int)
205unzipWithFstM = do
202unzipWithFstM = do
206− let f = \a -> return (a+1, a)
203+ let f = \a -> return (a + 1, a)
207 IP.fold (FL.unzipWithFstM f FL.sum FL.length)
204 IP.fold (FL.unzipWithFstM f FL.sum FL.length)
209{-# INLINE unzipWithMinM #-}
206{-# INLINE unzipWithMinM #-}
210unzipWithMinM :: Monad m => SerialT m Int -> m (Int, Int)
207unzipWithMinM :: Monad m => SerialT m Int -> m (Int, Int)
211unzipWithMinM = do
208unzipWithMinM = do
212− let f = \a -> return (a+1, a)
209+ let f = \a -> return (a + 1, a)
213 IP.fold (FL.unzipWithMinM f FL.sum FL.length)
210 IP.fold (FL.unzipWithMinM f FL.sum FL.length)
215-------------------------------------------------------------------------------
212-------------------------------------------------------------------------------
@@ -323,8 +320,8 @@ o_1_space_serial_composition value =
323 , benchIOSink value "teeWithMin (sum, length)" teeWithMin
320 , benchIOSink value "teeWithMin (sum, length)" teeWithMin
324 , benchIOSink value "distribute [sum, length]" distribute
321 , benchIOSink value "distribute [sum, length]" distribute
325 , benchIOSink value "partition (sum, length)" partition
322 , benchIOSink value "partition (sum, length)" partition
326− , benchIOSink value "partitionByFstM (length, length)" partitionByFstM
323+ , benchIOSink value "partitionByFstM (sum, length)" partitionByFstM
327− , benchIOSink value "partitionByMinM (length, length)" partitionByMinM
324+ , benchIOSink value "partitionByMinM (sum, length)" partitionByMinM
328 , benchIOSink value "unzip (sum, length)" unzip
325 , benchIOSink value "unzip (sum, length)" unzip
329 , benchIOSink value "unzipWithFstM (sum, length)" unzipWithFstM
326 , benchIOSink value "unzipWithFstM (sum, length)" unzipWithFstM
330 , benchIOSink value "unzipWithMinM (sum, length)" unzipWithMinM
327 , benchIOSink value "unzipWithMinM (sum, length)" unzipWithMinM