@@ -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
105115foreign import append
106116 " function append (l1) {\
0 commit comments