@@ -148,26 +148,23 @@ distribute = IP.fold (FL.distribute [FL.sum, FL.length])
148148-- Partitioning
149149-------------------------------------------------------------------------------
150150
151+{-# INLINE oddEven #-}
152+oddEven :: Int -> Either Int Int
153+oddEven x = if odd x then Left x else Right x
154+
151155{-# INLINE partition #-}
152156partition :: Monad m => SerialT m Int -> m (Int, Int)
153−partition =
154− let f a =
155− if odd a
156− then Left a
157− else Right a
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)
159158
160159{-# INLINE partitionByFstM #-}
161160partitionByFstM :: Monad m => SerialT m Int -> m (Int, Int)
162−partitionByFstM = do
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)
161+partitionByFstM =
162+ IP.fold (FL.partitionByFstM (return . oddEven) FL.sum FL.length)
165163
166164{-# INLINE partitionByMinM #-}
167165partitionByMinM :: Monad m => SerialT m Int -> m (Int, Int)
168−partitionByMinM = do
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)
166+partitionByMinM =
167+ IP.fold (FL.partitionByMinM (return . oddEven) FL.sum FL.length)
171168
172169{-# INLINE demuxWith #-}
173170demuxWith ::
@@ -203,13 +200,13 @@ unzip = IP.fold $ FL.lmap (\a -> (a, a)) (FL.unzip FL.sum FL.length)
203200{-# INLINE unzipWithFstM #-}
204201unzipWithFstM :: Monad m => SerialT m Int -> m (Int, Int)
205202unzipWithFstM = do
206− let f = \a -> return (a+1, a)
203+ let f = \a -> return (a + 1, a)
207204 IP.fold (FL.unzipWithFstM f FL.sum FL.length)
208205
209206{-# INLINE unzipWithMinM #-}
210207unzipWithMinM :: Monad m => SerialT m Int -> m (Int, Int)
211208unzipWithMinM = do
212− let f = \a -> return (a+1, a)
209+ let f = \a -> return (a + 1, a)
213210 IP.fold (FL.unzipWithMinM f FL.sum FL.length)
214211
215212-------------------------------------------------------------------------------
@@ -323,8 +320,8 @@ o_1_space_serial_composition value =
323320 , benchIOSink value "teeWithMin (sum, length)" teeWithMin
324321 , benchIOSink value "distribute [sum, length]" distribute
325322 , benchIOSink value "partition (sum, length)" partition
326− , benchIOSink value "partitionByFstM (length, length)" partitionByFstM
327− , benchIOSink value "partitionByMinM (length, length)" partitionByMinM
323+ , benchIOSink value "partitionByFstM (sum, length)" partitionByFstM
324+ , benchIOSink value "partitionByMinM (sum, length)" partitionByMinM
328325 , benchIOSink value "unzip (sum, length)" unzip
329326 , benchIOSink value "unzipWithFstM (sum, length)" unzipWithFstM
330327 , benchIOSink value "unzipWithMinM (sum, length)" unzipWithMinM