28
28
-- | allowing you to STAI.iterate over an array and accumulate effects.
29
29
-- |
30
30
module Data.Array
31
- ( (!!)
32
- , (..)
33
- , (:)
34
- , (\\)
35
- , all
36
- , alterAt
37
- , any
38
- , catMaybes
39
- , concat
40
- , concatMap
41
- , cons
42
- , delete
43
- , deleteAt
44
- , deleteBy
45
- , difference
46
- , drop
47
- , dropEnd
48
- , dropWhile
31
+ ( fromFoldable
32
+ , toUnfoldable
33
+ , singleton
34
+ , (..), range
35
+ , replicate
36
+ , some
37
+ , many
38
+
39
+ , null
40
+ , isEmpty
41
+ , length
42
+
43
+ , (:), cons
44
+ , snoc
45
+ , insert
46
+ , insertBy
47
+
48
+ , head
49
+ , last
50
+ , tail
51
+ , init
52
+ , uncons
53
+ , unsnoc
54
+
55
+ , (!!), index
49
56
, elem
57
+ , notElem
50
58
, elemIndex
51
59
, elemLastIndex
52
- , filter
53
- , filterA
54
60
, find
61
+ , findMap
55
62
, findIndex
56
63
, findLastIndex
57
- , findMap
58
- , fold
59
- , foldM
60
- , foldMap
61
- , foldRecM
62
- , foldl
63
- , foldr
64
- , fromFoldable
65
- , group
66
- , groupAll
67
- , groupAllBy
68
- , groupBy
69
- , head
70
- , index
71
- , init
72
- , insert
73
64
, insertAt
74
- , insertBy
75
- , intercalate
76
- , intersect
77
- , intersectBy
78
- , intersperse
79
- , isEmpty
80
- , last
81
- , length
82
- , many
83
- , mapMaybe
84
- , mapWithIndex
65
+ , deleteAt
66
+ , updateAt
67
+ , updateAtIndices
85
68
, modifyAt
86
69
, modifyAtIndices
87
- , notElem
88
- , nub
89
- , nubBy
90
- , nubByEq
91
- , nubEq
92
- , null
93
- , partition
94
- , range
95
- , replicate
70
+ , alterAt
71
+
72
+ , intersperse
96
73
, reverse
74
+ , concat
75
+ , concatMap
76
+ , filter
77
+ , partition
78
+ , splitAt
79
+ , filterA
80
+ , mapMaybe
81
+ , catMaybes
82
+ , mapWithIndex
83
+ , foldl
84
+ , foldr
85
+ , foldMap
86
+ , fold
87
+ , intercalate
97
88
, scanl
98
89
, scanr
99
- , singleton
100
- , slice
101
- , snoc
102
- , some
90
+
103
91
, sort
104
92
, sortBy
105
93
, sortWith
106
- , span
107
- , splitAt
108
- , tail
94
+ , slice
109
95
, take
110
96
, takeEnd
111
97
, takeWhile
112
- , toUnfoldable
113
- , uncons
98
+ , drop
99
+ , dropEnd
100
+ , dropWhile
101
+ , span
102
+ , group
103
+ , groupAll
104
+ , groupBy
105
+ , groupAllBy
106
+
107
+ , nub
108
+ , nubEq
109
+ , nubBy
110
+ , nubByEq
114
111
, union
115
112
, unionBy
116
- , unsafeIndex
117
- , unsnoc
118
- , unzip
119
- , updateAt
120
- , updateAtIndices
121
- , zip
113
+ , delete
114
+ , deleteBy
115
+
116
+ , (\\), difference
117
+ , intersect
118
+ , intersectBy
119
+
122
120
, zipWith
123
121
, zipWithA
122
+ , zip
123
+ , unzip
124
+
125
+ , any
126
+ , all
127
+
128
+ , foldM
129
+ , foldRecM
130
+
131
+ , unsafeIndex
124
132
) where
125
133
126
134
import Prelude
@@ -147,7 +155,7 @@ toUnfoldable xs = unfoldr f 0
147
155
where
148
156
len = length xs
149
157
f i
150
- | i < len = Just (Tuple (unsafePartial (unsafeIndex xs i)) (i + 1 ))
158
+ | i < len = Just (Tuple (unsafePartial (unsafeIndex xs i)) (i+ 1 ))
151
159
| otherwise = Nothing
152
160
153
161
-- | Convert a `Foldable` structure into an `Array`.
@@ -171,7 +179,7 @@ foreign import fromFoldableImpl
171
179
-- | singleton 2 = [2]
172
180
-- | ```
173
181
singleton :: forall a . a -> Array a
174
- singleton a = [ a ]
182
+ singleton a = [a ]
175
183
176
184
-- | Create an array containing a range of integers, including both endpoints.
177
185
-- | ```purescript
@@ -244,7 +252,7 @@ foreign import length :: forall a. Array a -> Int
244
252
-- |
245
253
-- | Note, the running time of this function is `O(n)`.
246
254
cons :: forall a . a -> Array a -> Array a
247
- cons x xs = [ x ] <> xs
255
+ cons x xs = [x ] <> xs
248
256
249
257
-- | An infix alias for `cons`.
250
258
-- |
@@ -284,10 +292,8 @@ insert = insertBy compare
284
292
-- |
285
293
insertBy :: forall a . (a -> a -> Ordering ) -> a -> Array a -> Array a
286
294
insertBy cmp x ys =
287
- let
288
- i = maybe 0 (_ + 1 ) (findLastIndex (\y -> cmp x y == GT ) ys)
289
- in
290
- unsafePartial (fromJust (insertAt i x ys))
295
+ let i = maybe 0 (_ + 1 ) (findLastIndex (\y -> cmp x y == GT ) ys)
296
+ in unsafePartial (fromJust (insertAt i x ys))
291
297
292
298
-- ------------------------------------------------------------------------------
293
299
-- Non-indexed reads -----------------------------------------------------------
@@ -612,16 +618,15 @@ alterAt i f xs = maybe Nothing go (xs !! i)
612
618
-- | ```
613
619
intersperse :: forall a . a -> Array a -> Array a
614
620
intersperse a arr = case length arr of
615
- len
616
- | len < 2 -> arr
617
- | otherwise -> STA .run do
618
- let unsafeGetElem idx = unsafePartial (unsafeIndex arr idx)
619
- out <- STA .new
620
- _ <- STA .push (unsafeGetElem 0 ) out
621
- ST .for 1 len \idx -> do
622
- _ <- STA .push a out
623
- void (STA .push (unsafeGetElem idx) out)
624
- pure out
621
+ len | len < 2 -> arr
622
+ | otherwise -> STA .run do
623
+ let unsafeGetElem idx = unsafePartial (unsafeIndex arr idx)
624
+ out <- STA .new
625
+ _ <- STA .push (unsafeGetElem 0 ) out
626
+ ST .for 1 len \idx -> do
627
+ _ <- STA .push a out
628
+ void (STA .push (unsafeGetElem idx) out)
629
+ pure out
625
630
626
631
-- | Reverse an array, creating a new array.
627
632
-- |
@@ -704,7 +709,7 @@ splitAt i xs = { before: slice 0 i xs, after: slice i (length xs) xs }
704
709
filterA :: forall a f . Applicative f => (a -> f Boolean ) -> Array a -> f (Array a )
705
710
filterA p =
706
711
traverse (\x -> Tuple x <$> p x)
707
- >>> map (mapMaybe (\(Tuple x b) -> if b then Just x else Nothing ))
712
+ >>> map (mapMaybe (\(Tuple x b) -> if b then Just x else Nothing ))
708
713
709
714
-- | Apply a function to each element in an array, keeping only the results
710
715
-- | which contain a value, creating a new array.
@@ -1048,16 +1053,16 @@ nubBy :: forall a. (a -> a -> Ordering) -> Array a -> Array a
1048
1053
nubBy comp xs = case head indexedAndSorted of
1049
1054
Nothing -> []
1050
1055
Just x -> map snd $ sortWith fst $ ST .run do
1051
- -- TODO: use NonEmptyArrays here to avoid partial functions
1052
- result <- STA .unsafeThaw $ singleton x
1053
- ST .foreach indexedAndSorted \pair@(Tuple _ x') -> do
1054
- lst <- snd <<< unsafePartial (fromJust <<< last) <$> STA .unsafeFreeze result
1055
- when (comp lst x' /= EQ ) $ void $ STA .push pair result
1056
- STA .unsafeFreeze result
1056
+ -- TODO: use NonEmptyArrays here to avoid partial functions
1057
+ result <- STA .unsafeThaw $ singleton x
1058
+ ST .foreach indexedAndSorted \pair@(Tuple _ x') -> do
1059
+ lst <- snd <<< unsafePartial (fromJust <<< last) <$> STA .unsafeFreeze result
1060
+ when (comp lst x' /= EQ ) $ void $ STA .push pair result
1061
+ STA .unsafeFreeze result
1057
1062
where
1058
1063
indexedAndSorted :: Array (Tuple Int a )
1059
1064
indexedAndSorted = sortBy (\x y -> comp (snd x) (snd y))
1060
- (mapWithIndex Tuple xs)
1065
+ (mapWithIndex Tuple xs)
1061
1066
1062
1067
-- | Remove the duplicates from an array, where element equality is determined
1063
1068
-- | by the specified equivalence relation, creating a new array.
@@ -1124,7 +1129,7 @@ delete = deleteBy eq
1124
1129
-- | ```
1125
1130
-- |
1126
1131
deleteBy :: forall a . (a -> a -> Boolean ) -> a -> Array a -> Array a
1127
- deleteBy _ _ [] = []
1132
+ deleteBy _ _ [] = []
1128
1133
deleteBy eq x ys = maybe ys (\i -> unsafePartial $ fromJust (deleteAt i ys)) (findIndex (eq x) ys)
1129
1134
1130
1135
-- | Delete the first occurrence of each element in the second array from the
0 commit comments