@@ -10,7 +10,8 @@ module Data.Array
10
10
, map
11
11
, mapMaybe
12
12
, length
13
- , elem
13
+ , findIndex
14
+ , findLastIndex
14
15
, elemIndex
15
16
, elemLastIndex
16
17
, append
@@ -81,26 +82,35 @@ foreign import length
81
82
\ return xs.length;\
82
83
\}" :: forall a . [a ] -> Number
83
84
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;\
88
94
\ };\
89
- \}" :: forall a . a -> [a ] -> Boolean
95
+ \}" :: forall a . ( a -> Boolean ) -> [a ] -> Number
90
96
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;\
95
106
\ };\
96
- \}" :: forall a . a -> [a ] -> Number
107
+ \}" :: forall a . ( a -> Boolean ) -> [a ] -> Number
97
108
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)
104
114
105
115
foreign import append
106
116
" function append (l1) {\
0 commit comments