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