Repository : ssh://darcs.haskell.org//srv/darcs/packages/vector On branch :
http://hackage.haskell.org/trac/ghc/changeset/79bccc7a785dd37b05daa5d5e62ac416216200dc >--------------------------------------------------------------- commit 79bccc7a785dd37b05daa5d5e62ac416216200dc Author: Roman Leshchinskiy <[email protected]> Date: Sat May 14 11:01:24 2011 +0000 Use delayed_min in Unboxed tuple instances >--------------------------------------------------------------- Data/Vector/Unboxed.hs | 1 + Data/Vector/Unboxed/Mutable.hs | 1 + internal/GenUnboxTuple.hs | 2 +- internal/unbox-tuple-instances | 56 ++++++++++++++++++++++----------------- 4 files changed, 35 insertions(+), 25 deletions(-) diff --git a/Data/Vector/Unboxed.hs b/Data/Vector/Unboxed.hs index 95afb0d..3753c98 100644 --- a/Data/Vector/Unboxed.hs +++ b/Data/Vector/Unboxed.hs @@ -162,6 +162,7 @@ module Data.Vector.Unboxed ( import Data.Vector.Unboxed.Base import qualified Data.Vector.Generic as G import qualified Data.Vector.Fusion.Stream as Stream +import Data.Vector.Fusion.Util ( delayed_min ) import Control.Monad.ST ( ST ) import Control.Monad.Primitive diff --git a/Data/Vector/Unboxed/Mutable.hs b/Data/Vector/Unboxed/Mutable.hs index 21933bc..60fbfa9 100644 --- a/Data/Vector/Unboxed/Mutable.hs +++ b/Data/Vector/Unboxed/Mutable.hs @@ -57,6 +57,7 @@ module Data.Vector.Unboxed.Mutable ( import Data.Vector.Unboxed.Base import qualified Data.Vector.Generic.Mutable as G +import Data.Vector.Fusion.Util ( delayed_min ) import Control.Monad.Primitive import Prelude hiding ( length, null, replicate, reverse, map, read, diff --git a/internal/GenUnboxTuple.hs b/internal/GenUnboxTuple.hs index 5711667..748cda7 100644 --- a/internal/GenUnboxTuple.hs +++ b/internal/GenUnboxTuple.hs @@ -71,7 +71,7 @@ generate n = ,nest 2 $ hang (text "where") 2 $ text "len =" - <+> sep (punctuate (text " `min`") + <+> sep (punctuate (text " `delayed_min`") [text "length" <+> vs | vs <- varss]) ] where diff --git a/internal/unbox-tuple-instances b/internal/unbox-tuple-instances index d5f5879..9cf5e35 100644 --- a/internal/unbox-tuple-instances +++ b/internal/unbox-tuple-instances @@ -107,7 +107,7 @@ zip :: (Unbox a, Unbox b) => MVector s a -> MVector s b -> MVector s (a, b) {-# INLINE_STREAM zip #-} zip as bs = MV_2 len (unsafeSlice 0 len as) (unsafeSlice 0 len bs) - where len = length as `min` length bs + where len = length as `delayed_min` length bs -- | /O(1)/ Unzip 2 vectors unzip :: (Unbox a, Unbox b) => MVector s (a, b) -> (MVector s a, MVector s b) @@ -119,7 +119,7 @@ unzip (MV_2 n_ as bs) = (as, bs) zip :: (Unbox a, Unbox b) => Vector a -> Vector b -> Vector (a, b) {-# INLINE_STREAM zip #-} zip as bs = V_2 len (unsafeSlice 0 len as) (unsafeSlice 0 len bs) - where len = length as `min` length bs + where len = length as `delayed_min` length bs {-# RULES "stream/zip [Vector.Unboxed]" forall as bs . G.stream (zip as bs) = Stream.zipWith (,) (G.stream as) (G.stream bs) @@ -265,7 +265,8 @@ zip3 :: (Unbox a, Unbox b, Unbox c) => MVector s a -> zip3 as bs cs = MV_3 len (unsafeSlice 0 len as) (unsafeSlice 0 len bs) (unsafeSlice 0 len cs) - where len = length as `min` length bs `min` length cs + where + len = length as `delayed_min` length bs `delayed_min` length cs -- | /O(1)/ Unzip 3 vectors unzip3 :: (Unbox a, Unbox b, @@ -284,7 +285,8 @@ zip3 :: (Unbox a, Unbox b, Unbox c) => Vector a -> zip3 as bs cs = V_3 len (unsafeSlice 0 len as) (unsafeSlice 0 len bs) (unsafeSlice 0 len cs) - where len = length as `min` length bs `min` length cs + where + len = length as `delayed_min` length bs `delayed_min` length cs {-# RULES "stream/zip3 [Vector.Unboxed]" forall as bs cs . G.stream (zip3 as bs cs) = Stream.zipWith3 (, ,) (G.stream as) (G.stream bs) @@ -465,7 +467,10 @@ zip4 as bs cs ds = MV_4 len (unsafeSlice 0 len as) (unsafeSlice 0 len cs) (unsafeSlice 0 len ds) where - len = length as `min` length bs `min` length cs `min` length ds + len = length as `delayed_min` + length bs `delayed_min` + length cs `delayed_min` + length ds -- | /O(1)/ Unzip 4 vectors unzip4 :: (Unbox a, Unbox b, @@ -489,7 +494,10 @@ zip4 as bs cs ds = V_4 len (unsafeSlice 0 len as) (unsafeSlice 0 len cs) (unsafeSlice 0 len ds) where - len = length as `min` length bs `min` length cs `min` length ds + len = length as `delayed_min` + length bs `delayed_min` + length cs `delayed_min` + length ds {-# RULES "stream/zip4 [Vector.Unboxed]" forall as bs cs ds . G.stream (zip4 as bs cs ds) = Stream.zipWith4 (, , ,) (G.stream as) (G.stream bs) @@ -713,10 +721,10 @@ zip5 as bs cs ds es = MV_5 len (unsafeSlice 0 len as) (unsafeSlice 0 len ds) (unsafeSlice 0 len es) where - len = length as `min` - length bs `min` - length cs `min` - length ds `min` + len = length as `delayed_min` + length bs `delayed_min` + length cs `delayed_min` + length ds `delayed_min` length es -- | /O(1)/ Unzip 5 vectors unzip5 :: (Unbox a, @@ -749,10 +757,10 @@ zip5 as bs cs ds es = V_5 len (unsafeSlice 0 len as) (unsafeSlice 0 len ds) (unsafeSlice 0 len es) where - len = length as `min` - length bs `min` - length cs `min` - length ds `min` + len = length as `delayed_min` + length bs `delayed_min` + length cs `delayed_min` + length ds `delayed_min` length es {-# RULES "stream/zip5 [Vector.Unboxed]" forall as bs cs ds es . G.stream (zip5 as @@ -1013,11 +1021,11 @@ zip6 as bs cs ds es fs = MV_6 len (unsafeSlice 0 len as) (unsafeSlice 0 len es) (unsafeSlice 0 len fs) where - len = length as `min` - length bs `min` - length cs `min` - length ds `min` - length es `min` + len = length as `delayed_min` + length bs `delayed_min` + length cs `delayed_min` + length ds `delayed_min` + length es `delayed_min` length fs -- | /O(1)/ Unzip 6 vectors unzip6 :: (Unbox a, @@ -1055,11 +1063,11 @@ zip6 as bs cs ds es fs = V_6 len (unsafeSlice 0 len as) (unsafeSlice 0 len es) (unsafeSlice 0 len fs) where - len = length as `min` - length bs `min` - length cs `min` - length ds `min` - length es `min` + len = length as `delayed_min` + length bs `delayed_min` + length cs `delayed_min` + length ds `delayed_min` + length es `delayed_min` length fs {-# RULES "stream/zip6 [Vector.Unboxed]" forall as bs cs ds es fs . G.stream (zip6 as _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
