Skip to content

Commit ee26d59

Browse files
committed
Add mapMaybe
1 parent 3ab09b4 commit ee26d59

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

src/Data/Array.purs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module Data.Array
88
, init
99
, null
1010
, map
11+
, mapMaybe
1112
, length
1213
, elem
1314
, elemIndex
@@ -79,7 +80,7 @@ foreign import length
7980
"function length (xs) {\
8081
\ return xs.length;\
8182
\}" :: forall a. [a] -> Number
82-
83+
8384
foreign import elem
8485
"function elem(e) {\
8586
\ return function (l) {\
@@ -100,7 +101,7 @@ foreign import elemLastIndex
100101
\ return l.lastIndexOf(e);\
101102
\ };\
102103
\}" :: forall a. a -> [a] -> Number
103-
104+
104105
foreign import append
105106
"function append (l1) {\
106107
\ return function (l2) {\
@@ -186,7 +187,7 @@ foreign import concatMap
186187
\ return result;\
187188
\ };\
188189
\}" :: forall a b. (a -> [b]) -> [a] -> [b]
189-
190+
190191
foreign import map
191192
"function map (f) {\
192193
\ return function (arr) {\
@@ -199,6 +200,21 @@ foreign import map
199200
\ };\
200201
\}" :: forall a b. (a -> b) -> [a] -> [b]
201202

203+
foreign import mapMaybe
204+
"function mapMaybe (f) {\
205+
\ return function (arr) {\
206+
\ var l = arr.length, n = 0;\
207+
\ var result = new Array();\
208+
\ for (var i = 0; i < l; i++) {\
209+
\ var x = f(arr[i]);\
210+
\ if (x.ctor === 'Data.Maybe.Just') {\
211+
\ result[n++] = x.values[0];\
212+
\ }\
213+
\ }\
214+
\ return result;\
215+
\ };\
216+
\}" :: forall a b. (a -> Maybe b) -> [a] -> [b]
217+
202218
foreign import filter
203219
"function filter (f) {\
204220
\ return function (arr) {\

0 commit comments

Comments
 (0)