Skip to content

Commit 219b33f

Browse files
authored
Merge pull request #488 from Shimuuar/strict-vector
Add strict vector
2 parents 655b5d6 + 96b0cc0 commit 219b33f

File tree

13 files changed

+3512
-78
lines changed

13 files changed

+3512
-78
lines changed

vector-bench-papi/LICENSE

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
Copyright (c) 2008-2012, Roman Leshchinskiy
2+
2020-2022, Alexey Kuleshevich
3+
2020-2022, Aleksey Khudyakov
4+
2020-2022, Andrew Lelechenko
5+
All rights reserved.
6+
7+
Redistribution and use in source and binary forms, with or without
8+
modification, are permitted provided that the following conditions are met:
9+
10+
- Redistributions of source code must retain the above copyright notice,
11+
this list of conditions and the following disclaimer.
12+
13+
- Redistributions in binary form must reproduce the above copyright notice,
14+
this list of conditions and the following disclaimer in the documentation
15+
and/or other materials provided with the distribution.
16+
17+
- Neither name of the University nor the names of its contributors may be
18+
used to endorse or promote products derived from this software without
19+
specific prior written permission.
20+
21+
THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY COURT OF THE UNIVERSITY OF
22+
GLASGOW AND THE CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
23+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
24+
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25+
UNIVERSITY COURT OF THE UNIVERSITY OF GLASGOW OR THE CONTRIBUTORS BE LIABLE
26+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
28+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30+
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31+
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
32+
DAMAGE.

vector/src/Data/Vector/Generic.hs

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -898,7 +898,7 @@ unsafeUpdate_stream = modifyWithBundle M.unsafeUpdate
898898
--
899899
-- ==== __Examples__
900900
--
901-
-- >>> import qualified Data.Vector as V
901+
-- >>> import qualified Data.Vector.Strict as V
902902
-- >>> V.accum (+) (V.fromList [1000,2000,3000]) [(2,4),(1,6),(0,3),(1,10)]
903903
-- [1003,2016,3004]
904904
accum :: Vector v a
@@ -914,7 +914,7 @@ accum f v us = accum_stream f v (Bundle.fromList us)
914914
--
915915
-- ==== __Examples__
916916
--
917-
-- >>> import qualified Data.Vector as V
917+
-- >>> import qualified Data.Vector.Strict as V
918918
-- >>> V.accumulate (+) (V.fromList [1000,2000,3000]) (V.fromList [(2,4),(1,6),(0,3),(1,10)])
919919
-- [1003,2016,3004]
920920
accumulate :: (Vector v a, Vector v (Int, b))
@@ -1039,8 +1039,8 @@ unsafeBackpermute v is = seq v
10391039
--
10401040
-- ==== __Examples__
10411041
--
1042-
-- >>> import qualified Data.Vector as V
1043-
-- >>> import qualified Data.Vector.Mutable as MV
1042+
-- >>> import qualified Data.Vector.Strict as V
1043+
-- >>> import qualified Data.Vector.Strict.Mutable as MV
10441044
-- >>> V.modify (\v -> MV.write v 0 'x') $ V.replicate 4 'a'
10451045
-- "xaaa"
10461046
modify :: Vector v a => (forall s. Mutable v s a -> ST s ()) -> v a -> v a
@@ -1399,7 +1399,7 @@ ifilter f = unstream
13991399
--
14001400
-- ==== __Examples__
14011401
--
1402-
-- >>> import qualified Data.Vector as V
1402+
-- >>> import qualified Data.Vector.Strict as V
14031403
-- >>> V.uniq $ V.fromList [1,3,3,200,3]
14041404
-- [1,3,200,3]
14051405
-- >>> import Data.Semigroup
@@ -1559,7 +1559,7 @@ unstablePartition_new f (New.New p) = runST (
15591559
--
15601560
-- ==== __Examples__
15611561
--
1562-
-- >>> import qualified Data.Vector as V
1562+
-- >>> import qualified Data.Vector.Strict as V
15631563
-- >>> V.span (<4) $ V.generate 10 id
15641564
-- ([0,1,2,3],[4,5,6,7,8,9])
15651565
span :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
@@ -1573,7 +1573,7 @@ span f = break (not . f)
15731573
--
15741574
-- ==== __Examples__
15751575
--
1576-
-- >>> import qualified Data.Vector as V
1576+
-- >>> import qualified Data.Vector.Strict as V
15771577
-- >>> V.break (>4) $ V.generate 10 id
15781578
-- ([0,1,2,3,4],[5,6,7,8,9])
15791579
break :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
@@ -1589,7 +1589,7 @@ break f xs = case findIndex f xs of
15891589
--
15901590
-- ==== __Examples__
15911591
--
1592-
-- >>> import qualified Data.Vector as V
1592+
-- >>> import qualified Data.Vector.Strict as V
15931593
-- >>> V.spanR (>4) $ V.generate 10 id
15941594
-- ([5,6,7,8,9],[0,1,2,3,4])
15951595
spanR :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
@@ -1605,7 +1605,7 @@ spanR f = breakR (not . f)
16051605
--
16061606
-- ==== __Examples__
16071607
--
1608-
-- >>> import qualified Data.Vector as V
1608+
-- >>> import qualified Data.Vector.Strict as V
16091609
-- >>> V.breakR (<5) $ V.generate 10 id
16101610
-- ([5,6,7,8,9],[0,1,2,3,4])
16111611
breakR :: Vector v a => (a -> Bool) -> v a -> (v a, v a)
@@ -1624,7 +1624,7 @@ breakR f xs = case findIndexR f xs of
16241624
-- and each slice contains only equal elements, as determined by the equality
16251625
-- predicate function.
16261626
--
1627-
-- >>> import qualified Data.Vector as V
1627+
-- >>> import qualified Data.Vector.Strict as V
16281628
-- >>> import Data.Char (isUpper)
16291629
-- >>> V.groupBy (\a b -> isUpper a == isUpper b) (V.fromList "Mississippi River")
16301630
-- ["M","ississippi ","R","iver"]
@@ -1649,7 +1649,7 @@ groupBy f v =
16491649
--
16501650
-- This is the equivalent of 'groupBy (==)'.
16511651
--
1652-
-- >>> import qualified Data.Vector as V
1652+
-- >>> import qualified Data.Vector.Strict as V
16531653
-- >>> V.group (V.fromList "Mississippi")
16541654
-- ["M","i","ss","i","ss","i","pp","i"]
16551655
--
@@ -1813,7 +1813,7 @@ foldMap' f = foldl' (\acc a -> acc `mappend` f a) mempty
18131813
--
18141814
-- ==== __Examples__
18151815
--
1816-
-- >>> import qualified Data.Vector as V
1816+
-- >>> import qualified Data.Vector.Strict as V
18171817
-- >>> V.all even $ V.fromList [2, 4, 12]
18181818
-- True
18191819
-- >>> V.all even $ V.fromList [2, 4, 13]
@@ -1828,7 +1828,7 @@ all f = Bundle.and . Bundle.map f . stream
18281828
--
18291829
-- ==== __Examples__
18301830
--
1831-
-- >>> import qualified Data.Vector as V
1831+
-- >>> import qualified Data.Vector.Strict as V
18321832
-- >>> V.any even $ V.fromList [1, 3, 7]
18331833
-- False
18341834
-- >>> V.any even $ V.fromList [3, 2, 13]
@@ -1843,7 +1843,7 @@ any f = Bundle.or . Bundle.map f . stream
18431843
--
18441844
-- ==== __Examples__
18451845
--
1846-
-- >>> import qualified Data.Vector as V
1846+
-- >>> import qualified Data.Vector.Strict as V
18471847
-- >>> V.and $ V.fromList [True, False]
18481848
-- False
18491849
-- >>> V.and V.empty
@@ -1856,7 +1856,7 @@ and = Bundle.and . stream
18561856
--
18571857
-- ==== __Examples__
18581858
--
1859-
-- >>> import qualified Data.Vector as V
1859+
-- >>> import qualified Data.Vector.Strict as V
18601860
-- >>> V.or $ V.fromList [True, False]
18611861
-- True
18621862
-- >>> V.or V.empty
@@ -1869,7 +1869,7 @@ or = Bundle.or . stream
18691869
--
18701870
-- ==== __Examples__
18711871
--
1872-
-- >>> import qualified Data.Vector as V
1872+
-- >>> import qualified Data.Vector.Strict as V
18731873
-- >>> V.sum $ V.fromList [300,20,1]
18741874
-- 321
18751875
-- >>> V.sum (V.empty :: V.Vector Int)
@@ -1882,7 +1882,7 @@ sum = Bundle.foldl' (+) 0 . stream
18821882
--
18831883
-- ==== __Examples__
18841884
--
1885-
-- >>> import qualified Data.Vector as V
1885+
-- >>> import qualified Data.Vector.Strict as V
18861886
-- >>> V.product $ V.fromList [1,2,3,4]
18871887
-- 24
18881888
-- >>> V.product (V.empty :: V.Vector Int)
@@ -1896,7 +1896,7 @@ product = Bundle.foldl' (*) 1 . stream
18961896
--
18971897
-- ==== __Examples__
18981898
--
1899-
-- >>> import qualified Data.Vector as V
1899+
-- >>> import qualified Data.Vector.Strict as V
19001900
-- >>> V.maximum $ V.fromList [2, 1]
19011901
-- 2
19021902
-- >>> import Data.Semigroup
@@ -1916,7 +1916,7 @@ maximum = Bundle.foldl1' max . stream
19161916
-- ==== __Examples__
19171917
--
19181918
-- >>> import Data.Ord
1919-
-- >>> import qualified Data.Vector as V
1919+
-- >>> import qualified Data.Vector.Strict as V
19201920
-- >>> V.maximumBy (comparing fst) $ V.fromList [(2,'a'), (1,'b')]
19211921
-- (2,'a')
19221922
-- >>> V.maximumBy (comparing fst) $ V.fromList [(1,'a'), (1,'b')]
@@ -1936,7 +1936,7 @@ maximumBy cmpr = Bundle.foldl1' maxBy . stream
19361936
--
19371937
-- ==== __Examples__
19381938
--
1939-
-- >>> import qualified Data.Vector as V
1939+
-- >>> import qualified Data.Vector.Strict as V
19401940
-- >>> V.maximumOn fst $ V.fromList [(2,'a'), (1,'b')]
19411941
-- (2,'a')
19421942
-- >>> V.maximumOn fst $ V.fromList [(1,'a'), (1,'b')]
@@ -1957,7 +1957,7 @@ maximumOn f = fst . Bundle.foldl1' maxBy . Bundle.map (\a -> (a, f a)) . stream
19571957
--
19581958
-- ==== __Examples__
19591959
--
1960-
-- >>> import qualified Data.Vector as V
1960+
-- >>> import qualified Data.Vector.Strict as V
19611961
-- >>> V.minimum $ V.fromList [2, 1]
19621962
-- 1
19631963
-- >>> import Data.Semigroup
@@ -1976,7 +1976,7 @@ minimum = Bundle.foldl1' min . stream
19761976
-- ==== __Examples__
19771977
--
19781978
-- >>> import Data.Ord
1979-
-- >>> import qualified Data.Vector as V
1979+
-- >>> import qualified Data.Vector.Strict as V
19801980
-- >>> V.minimumBy (comparing fst) $ V.fromList [(2,'a'), (1,'b')]
19811981
-- (1,'b')
19821982
-- >>> V.minimumBy (comparing fst) $ V.fromList [(1,'a'), (1,'b')]
@@ -1996,7 +1996,7 @@ minimumBy cmpr = Bundle.foldl1' minBy . stream
19961996
--
19971997
-- ==== __Examples__
19981998
--
1999-
-- >>> import qualified Data.Vector as V
1999+
-- >>> import qualified Data.Vector.Strict as V
20002000
-- >>> V.minimumOn fst $ V.fromList [(2,'a'), (1,'b')]
20012001
-- (1,'b')
20022002
-- >>> V.minimumOn fst $ V.fromList [(1,'a'), (1,'b')]
@@ -2025,7 +2025,7 @@ maxIndex = maxIndexBy compare
20252025
-- ==== __Examples__
20262026
--
20272027
-- >>> import Data.Ord
2028-
-- >>> import qualified Data.Vector as V
2028+
-- >>> import qualified Data.Vector.Strict as V
20292029
-- >>> V.maxIndexBy (comparing fst) $ V.fromList [(2,'a'), (1,'b')]
20302030
-- 0
20312031
-- >>> V.maxIndexBy (comparing fst) $ V.fromList [(1,'a'), (1,'b')]
@@ -2051,7 +2051,7 @@ minIndex = minIndexBy compare
20512051
-- ==== __Examples__
20522052
--
20532053
-- >>> import Data.Ord
2054-
-- >>> import qualified Data.Vector as V
2054+
-- >>> import qualified Data.Vector.Strict as V
20552055
-- >>> V.minIndexBy (comparing fst) $ V.fromList [(2,'a'), (1,'b')]
20562056
-- 1
20572057
-- >>> V.minIndexBy (comparing fst) $ V.fromList [(1,'a'), (1,'b')]
@@ -2160,7 +2160,7 @@ sequence_ = mapM_ id
21602160
--
21612161
-- ==== __Examples__
21622162
--
2163-
-- >>> import qualified Data.Vector as V
2163+
-- >>> import qualified Data.Vector.Strict as V
21642164
-- >>> V.prescanl (+) 0 (V.fromList [1,2,3,4])
21652165
-- [0,1,3,6]
21662166
prescanl :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
@@ -2180,7 +2180,7 @@ prescanl' f z = unstream . inplace (S.prescanl' f z) id . stream
21802180
--
21812181
-- ==== __Examples__
21822182
--
2183-
-- >>> import qualified Data.Vector as V
2183+
-- >>> import qualified Data.Vector.Strict as V
21842184
-- >>> V.postscanl (+) 0 (V.fromList [1,2,3,4])
21852185
-- [1,3,6,10]
21862186
postscanl :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
@@ -2200,7 +2200,7 @@ postscanl' f z = unstream . inplace (S.postscanl' f z) id . stream
22002200
--
22012201
-- ==== __Examples__
22022202
--
2203-
-- >>> import qualified Data.Vector as V
2203+
-- >>> import qualified Data.Vector.Strict as V
22042204
-- >>> V.scanl (+) 0 (V.fromList [1,2,3,4])
22052205
-- [0,1,3,6,10]
22062206
scanl :: (Vector v a, Vector v b) => (a -> b -> a) -> a -> v b -> v a
@@ -2239,7 +2239,7 @@ iscanl' f z =
22392239
-- results in an error; instead it produces an empty vector.
22402240
--
22412241
-- ==== __Examples__
2242-
-- >>> import qualified Data.Vector as V
2242+
-- >>> import qualified Data.Vector.Strict as V
22432243
-- >>> V.scanl1 min $ V.fromListN 5 [4,2,4,1,3]
22442244
-- [4,2,2,1,1]
22452245
-- >>> V.scanl1 max $ V.fromListN 5 [1,3,2,5,4]
@@ -2256,7 +2256,7 @@ scanl1 f = unstream . inplace (S.scanl1 f) id . stream
22562256
-- results in an error; instead it produces an empty vector.
22572257
--
22582258
-- ==== __Examples__
2259-
-- >>> import qualified Data.Vector as V
2259+
-- >>> import qualified Data.Vector.Strict as V
22602260
-- >>> V.scanl1' min $ V.fromListN 5 [4,2,4,1,3]
22612261
-- [4,2,2,1,1]
22622262
-- >>> V.scanl1' max $ V.fromListN 5 [1,3,2,5,4]
@@ -2327,7 +2327,7 @@ iscanr' f z v =
23272327
-- results in an error; instead it produces an empty vector.
23282328
--
23292329
-- ==== __Examples__
2330-
-- >>> import qualified Data.Vector as V
2330+
-- >>> import qualified Data.Vector.Strict as V
23312331
-- >>> V.scanr1 min $ V.fromListN 5 [3,1,4,2,4]
23322332
-- [1,1,2,2,4]
23332333
-- >>> V.scanr1 max $ V.fromListN 5 [4,5,2,3,1]
@@ -2345,7 +2345,7 @@ scanr1 f = unstreamR . inplace (S.scanl1 (flip f)) id . streamR
23452345
-- results in an error; instead it produces an empty vector.
23462346
--
23472347
-- ==== __Examples__
2348-
-- >>> import qualified Data.Vector as V
2348+
-- >>> import qualified Data.Vector.Strict as V
23492349
-- >>> V.scanr1' min $ V.fromListN 5 [3,1,4,2,4]
23502350
-- [1,1,2,2,4]
23512351
-- >>> V.scanr1' max $ V.fromListN 5 [4,5,2,3,1]
@@ -2381,7 +2381,7 @@ fromList = unstream . Bundle.fromList
23812381
--
23822382
-- ==== __Examples__
23832383
--
2384-
-- >>> import qualified Data.Vector as V
2384+
-- >>> import qualified Data.Vector.Strict as V
23852385
-- >>> V.fromListN 3 [1,2,3,4,5]
23862386
-- [1,2,3]
23872387
-- >>> V.fromListN 3 [1]

vector/src/Data/Vector/Generic/Mutable.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -639,7 +639,7 @@ clear = stToPrim . basicClear
639639
--
640640
-- ==== __Examples__
641641
--
642-
-- >>> import qualified Data.Vector.Mutable as MV
642+
-- >>> import qualified Data.Vector.Strict.Mutable as MV
643643
-- >>> v <- MV.generate 10 (\x -> x*x)
644644
-- >>> MV.read v 3
645645
-- 9
@@ -655,7 +655,7 @@ read v i = checkIndex Bounds i (length v)
655655
--
656656
-- ==== __Examples__
657657
--
658-
-- >>> import qualified Data.Vector.Mutable as MV
658+
-- >>> import qualified Data.Vector.Strict.Mutable as MV
659659
-- >>> v <- MV.generate 10 (\x -> x*x)
660660
-- >>> MV.readMaybe v 3
661661
-- Just 9

0 commit comments

Comments
 (0)