Add fromListN
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sun, 21 Feb 2010 02:48:27 +0000 (02:48 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Sun, 21 Feb 2010 02:48:27 +0000 (02:48 +0000)
Data/Vector.hs
Data/Vector/Fusion/Stream.hs
Data/Vector/Fusion/Stream/Monadic.hs
Data/Vector/Generic.hs
Data/Vector/Primitive.hs
Data/Vector/Storable.hs
Data/Vector/Unboxed.hs

index 49349a6..31fff91 100644 (file)
@@ -114,7 +114,7 @@ module Data.Vector (
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList
+  toList, fromList, fromListN
 ) where
 
 import qualified Data.Vector.Generic as G
 ) where
 
 import qualified Data.Vector.Generic as G
@@ -981,3 +981,10 @@ fromList :: [a] -> Vector a
 {-# INLINE fromList #-}
 fromList = G.fromList
 
 {-# INLINE fromList #-}
 fromList = G.fromList
 
+-- | Convert the first @n@ elements of a list to a vector
+--
+-- > fromListN n xs = fromList (take n xs)
+fromListN :: Int -> [a] -> Vector a
+{-# INLINE fromListN #-}
+fromListN = G.fromListN
+
index db25db4..56148ab 100644 (file)
@@ -67,7 +67,7 @@ module Data.Vector.Fusion.Stream (
   enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversions
   enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversions
-  toList, fromList, liftStream,
+  toList, fromList, fromListN, liftStream,
 
   -- * Monadic combinators
   mapM_, foldM, fold1M, foldM', fold1M',
 
   -- * Monadic combinators
   mapM_, foldM, fold1M, foldM', fold1M',
@@ -570,3 +570,10 @@ fromList :: [a] -> Stream a
 {-# INLINE fromList #-}
 fromList = M.fromList
 
 {-# INLINE fromList #-}
 fromList = M.fromList
 
+-- | Create a 'Stream' from the first @n@ elements of a list
+--
+-- > fromListN n xs = fromList (take n xs)
+fromListN :: Int -> [a] -> Stream a
+{-# INLINE fromListN #-}
+fromListN = M.fromListN
+
index b19eed4..3c638d2 100644 (file)
@@ -67,7 +67,7 @@ module Data.Vector.Fusion.Stream.Monadic (
   enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversions
   enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversions
-  toList, fromList
+  toList, fromList, fromListN
 ) where
 
 import Data.Vector.Fusion.Stream.Size
 ) where
 
 import Data.Vector.Fusion.Stream.Size
@@ -1381,3 +1381,13 @@ fromList xs = Stream step xs Unknown
     step (x:xs) = return (Yield x xs)
     step []     = return Done
 
     step (x:xs) = return (Yield x xs)
     step []     = return Done
 
+-- | Convert the first @n@ elements of a list to a 'Stream'
+fromListN :: Monad m => Int -> [a] -> Stream m a
+{-# INLINE_STREAM fromListN #-}
+fromListN n xs = Stream step (xs,n) (Max (delay_inline max n 0))
+  where
+    {-# INLINE_INNER step #-}
+    step (xs,n) | n <= 0 = return Done
+    step (x:xs,n)        = return (Yield x (xs,n-1))
+    step ([],n)          = return Done
+
index 0ba2c71..c878a1f 100644 (file)
@@ -83,7 +83,7 @@ module Data.Vector.Generic (
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList,
+  toList, fromList, fromListN,
 
   -- * Conversion to/from Streams
   stream, unstream, streamR, unstreamR,
 
   -- * Conversion to/from Streams
   stream, unstream, streamR, unstreamR,
@@ -1275,3 +1275,10 @@ fromList :: Vector v a => [a] -> v a
 {-# INLINE fromList #-}
 fromList = unstream . Stream.fromList
 
 {-# INLINE fromList #-}
 fromList = unstream . Stream.fromList
 
+-- | Convert the first @n@ elements of a list to a vector
+--
+-- > fromListN n xs = fromList (take n xs)
+fromListN :: Vector v a => Int -> [a] -> v a
+{-# INLINE fromListN #-}
+fromListN n = unstream . Stream.fromListN n
+
index e7cbf04..4f6bb92 100644 (file)
@@ -75,7 +75,7 @@ module Data.Vector.Primitive (
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList
+  toList, fromList, fromListN
 ) where
 
 import qualified Data.Vector.Generic           as G
 ) where
 
 import qualified Data.Vector.Generic           as G
@@ -825,3 +825,10 @@ fromList :: Prim a => [a] -> Vector a
 {-# INLINE fromList #-}
 fromList = G.fromList
 
 {-# INLINE fromList #-}
 fromList = G.fromList
 
+-- | Convert the first @n@ elements of a list to a vector
+--
+-- > fromListN n xs = fromList (take n xs)
+fromListN :: Prim a => Int -> [a] -> Vector a
+{-# INLINE fromListN #-}
+fromListN = G.fromListN
+
index ca3b595..b4583c0 100644 (file)
@@ -75,7 +75,7 @@ module Data.Vector.Storable (
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList,
+  toList, fromList, fromListN,
 
   -- * Accessing the underlying memory
   unsafeFromForeignPtr, unsafeToForeignPtr, unsafeWith
 
   -- * Accessing the underlying memory
   unsafeFromForeignPtr, unsafeToForeignPtr, unsafeWith
@@ -877,6 +877,13 @@ fromList :: Storable a => [a] -> Vector a
 {-# INLINE fromList #-}
 fromList = G.fromList
 
 {-# INLINE fromList #-}
 fromList = G.fromList
 
+-- | Convert the first @n@ elements of a list to a vector
+--
+-- > fromListN n xs = fromList (take n xs)
+fromListN :: Storable a => Int -> [a] -> Vector a
+{-# INLINE fromListN #-}
+fromListN = G.fromListN
+
 -- Accessing the underlying memory
 -- -------------------------------
 
 -- Accessing the underlying memory
 -- -------------------------------
 
index 069e1b0..e1359b6 100644 (file)
@@ -77,7 +77,7 @@ module Data.Vector.Unboxed (
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
   enumFromN, enumFromStepN, enumFromTo, enumFromThenTo,
 
   -- * Conversion to/from lists
-  toList, fromList
+  toList, fromList, fromListN
 ) where
 
 import Data.Vector.Unboxed.Base
 ) where
 
 import Data.Vector.Unboxed.Base
@@ -826,6 +826,13 @@ fromList :: Unbox a => [a] -> Vector a
 {-# INLINE fromList #-}
 fromList = G.fromList
 
 {-# INLINE fromList #-}
 fromList = G.fromList
 
+-- | Convert the first @n@ elements of a list to a vector
+--
+-- > fromListN n xs = fromList (take n xs)
+fromListN :: Unbox a => Int -> [a] -> Vector a
+{-# INLINE fromListN #-}
+fromListN = G.fromListN
+
 #define DEFINE_IMMUTABLE
 #include "unbox-tuple-instances"
 
 #define DEFINE_IMMUTABLE
 #include "unbox-tuple-instances"