Skip to content

Commit 0ab61ee

Browse files
committed
Merge pull request #3 from purescript/elem-updates
Drop elem, use Eq for elemIndex/elemLastIndex
2 parents 15e896e + 8dcae20 commit 0ab61ee

File tree

2 files changed

+33
-21
lines changed

2 files changed

+33
-21
lines changed

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,16 @@
3333

3434
drop :: forall a. Prim.Number -> [a] -> [a]
3535

36-
elem :: forall a. a -> [a] -> Prim.Boolean
36+
elemIndex :: forall a. (Eq a) => a -> [a] -> Prim.Number
3737

38-
elemIndex :: forall a. a -> [a] -> Prim.Number
39-
40-
elemLastIndex :: forall a. a -> [a] -> Prim.Number
38+
elemLastIndex :: forall a. (Eq a) => a -> [a] -> Prim.Number
4139

4240
filter :: forall a. (a -> Prim.Boolean) -> [a] -> [a]
4341

42+
findIndex :: forall a. (a -> Prim.Boolean) -> [a] -> Prim.Number
43+
44+
findLastIndex :: forall a. (a -> Prim.Boolean) -> [a] -> Prim.Number
45+
4446
head :: forall a. [a] -> Maybe a
4547

4648
init :: forall a. [a] -> Maybe [a]

src/Data/Array.purs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ module Data.Array
1010
, map
1111
, mapMaybe
1212
, length
13-
, elem
13+
, findIndex
14+
, findLastIndex
1415
, elemIndex
1516
, elemLastIndex
1617
, append
@@ -81,26 +82,35 @@ foreign import length
8182
\ return xs.length;\
8283
\}" :: forall a. [a] -> Number
8384

84-
foreign import elem
85-
"function elem(e) {\
86-
\ return function (l) {\
87-
\ return l.indexOf(e) !== -1;\
85+
foreign import findIndex
86+
"function findIndex (f) {\
87+
\ return function (arr) {\
88+
\ for (var i = 0, l = arr.length; i < l; i++) {\
89+
\ if (f(arr[i])) {\
90+
\ return i;\
91+
\ }\
92+
\ }\
93+
\ return -1;\
8894
\ };\
89-
\}" :: forall a. a -> [a] -> Boolean
95+
\}" :: forall a. (a -> Boolean) -> [a] -> Number
9096

91-
foreign import elemIndex
92-
"function elemIndex (e) {\
93-
\ return function (l) {\
94-
\ return l.indexOf(e);\
97+
foreign import findLastIndex
98+
"function findLastIndex (f) {\
99+
\ return function (arr) {\
100+
\ for (var i = arr.length - 1; i >= 0; i--) {\
101+
\ if (f(arr[i])) {\
102+
\ return i;\
103+
\ }\
104+
\ }\
105+
\ return -1;\
95106
\ };\
96-
\}" :: forall a. a -> [a] -> Number
107+
\}" :: forall a. (a -> Boolean) -> [a] -> Number
97108

98-
foreign import elemLastIndex
99-
"function elemLastIndex (e) {\
100-
\ return function (l) {\
101-
\ return l.lastIndexOf(e);\
102-
\ };\
103-
\}" :: forall a. a -> [a] -> Number
109+
elemIndex :: forall a. (Eq a) => a -> [a] -> Number
110+
elemIndex x = findIndex ((==) x)
111+
112+
elemLastIndex :: forall a. (Eq a) => a -> [a] -> Number
113+
elemLastIndex x = findLastIndex ((==) x)
104114

105115
foreign import append
106116
"function append (l1) {\

0 commit comments

Comments
 (0)