Skip to content

Commit 05f8ac4

Browse files
committed
Minor revisions to names, add some missing members
1 parent 4de5130 commit 05f8ac4

File tree

1 file changed

+66
-42
lines changed

1 file changed

+66
-42
lines changed

src/Data/Array.purs

Lines changed: 66 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
11
module Data.Array
22
( (!!)
3+
, snoc
34
, singleton
45
, head
6+
, last
57
, tail
8+
, init
9+
, null
610
, map
711
, length
8-
, indexOf
9-
, lastIndexOf
12+
, elem
13+
, elemIndex
14+
, elemLastIndex
15+
, append
1016
, concat
11-
, joinWith
1217
, reverse
1318
, drop
1419
, take
@@ -18,7 +23,6 @@ module Data.Array
1823
, updateAt
1924
, concatMap
2025
, filter
21-
, isEmpty
2226
, range
2327
, zipWith
2428
, nub
@@ -40,68 +44,80 @@ infixl 8 !!
4044
where
4145
isInt n = n /= complement (complement n)
4246

47+
foreign import snoc
48+
"function snoc(l) {\
49+
\ return function (e) {\
50+
\ var l1 = l.slice();\
51+
\ l1.push(e); \
52+
\ return l1;\
53+
\ };\
54+
\}" :: forall a. [a] -> a -> [a]
55+
4356
singleton :: forall a. a -> [a]
4457
singleton a = [a]
4558

4659
head :: forall a. [a] -> Maybe a
4760
head (x : _) = Just x
48-
head _ = Nothing
61+
head _ = Nothing
62+
63+
last :: forall a. [a] -> Maybe a
64+
last (x : []) = Just x
65+
last (_ : xs) = last xs
66+
last _ = Nothing
4967

5068
tail :: forall a. [a] -> Maybe [a]
5169
tail (_ : xs) = Just xs
52-
tail _ = Nothing
70+
tail _ = Nothing
5371

54-
foreign import map
55-
"function map (f) {\
56-
\ return function (arr) {\
57-
\ var l = arr.length;\
58-
\ var result = new Array(l);\
59-
\ for (var i = 0; i < l; i++) {\
60-
\ result[i] = f(arr[i]);\
61-
\ }\
62-
\ return result;\
63-
\ };\
64-
\}" :: forall a b. (a -> b) -> [a] -> [b]
72+
init :: forall a. [a] -> Maybe [a]
73+
init [] = Nothing
74+
init xs = Just (slice 0 (length xs - 1) xs)
75+
76+
null :: forall a. [a] -> Boolean
77+
null [] = true
78+
null _ = false
6579

6680
foreign import length
6781
"function length (xs) {\
6882
\ return xs.length;\
6983
\}" :: forall a. [a] -> Number
70-
71-
foreign import indexOf
72-
"function indexOf (l) {\
73-
\ return function (e) {\
74-
\ return l.indexOf(e);\
75-
\ };\
76-
\}" :: forall a. [a] -> a -> Number
77-
84+
7885
foreign import elem
7986
"function elem(l) {\
8087
\ return function (e) {\
8188
\ return l.indexOf(e) !== -1;\
8289
\ };\
8390
\}" :: forall a. [a] -> a -> Boolean
8491

85-
foreign import lastIndexOf
86-
"function lastIndexOf (l) {\
92+
foreign import elemIndex
93+
"function elemIndex (l) {\
8794
\ return function (e) {\
88-
\ return l.lastIndexOf(e);\
95+
\ return l.indexOf(e);\
8996
\ };\
9097
\}" :: forall a. [a] -> a -> Number
9198

92-
foreign import concat
93-
"function concat (l1) {\
99+
foreign import elemLastIndex
100+
"function elemLastIndex (l) {\
101+
\ return function (e) {\
102+
\ return l.lastIndexOf(e);\
103+
\ };\
104+
\}" :: forall a. [a] -> a -> Number
105+
106+
foreign import append
107+
"function append (l1) {\
94108
\ return function (l2) {\
95109
\ return l1.concat(l2);\
96110
\ };\
97111
\}" :: forall a. [a] -> [a] -> [a]
98112

99-
foreign import joinWith
100-
"function joinWith (l) {\
101-
\ return function (s) {\
102-
\ return l.join(s);\
103-
\ };\
104-
\}" :: [String] -> String -> String
113+
foreign import concat
114+
"function concat (xss) {\
115+
\ var result = [];\
116+
\ for (var i = 0, l = xss.length; i < l; i++) {\
117+
\ result.push.apply(result, xss[i]);\
118+
\ }\
119+
\ return result;\
120+
\}" :: forall a. [[a]] -> [a]
105121

106122
foreign import reverse
107123
"function reverse (l) {\
@@ -174,6 +190,18 @@ foreign import concatMap
174190
\ return result;\
175191
\ };\
176192
\}" :: forall a b. (a -> [b]) -> [a] -> [b]
193+
194+
foreign import map
195+
"function map (f) {\
196+
\ return function (arr) {\
197+
\ var l = arr.length;\
198+
\ var result = new Array(l);\
199+
\ for (var i = 0; i < l; i++) {\
200+
\ result[i] = f(arr[i]);\
201+
\ }\
202+
\ return result;\
203+
\ };\
204+
\}" :: forall a b. (a -> b) -> [a] -> [b]
177205

178206
foreign import filter
179207
"function filter (f) {\
@@ -189,10 +217,6 @@ foreign import filter
189217
\ };\
190218
\}" :: forall a. (a -> Boolean) -> [a] -> [a]
191219

192-
isEmpty :: forall a. [a] -> Boolean
193-
isEmpty [] = true
194-
isEmpty _ = false
195-
196220
range :: Number -> Number -> [Number]
197221
range lo hi | lo > hi = []
198222
range lo hi = lo : range (lo + 1) hi
@@ -250,11 +274,11 @@ instance bindArray :: Bind [] where
250274
instance monadArray :: Monad []
251275

252276
instance semigroupArray :: Semigroup [a] where
253-
(<>) = concat
277+
(<>) = append
254278

255279
instance monoidArray :: Monoid [a] where
256280
mempty = []
257281

258282
instance alternativeArray :: Alternative [] where
259283
empty = []
260-
(<|>) = concat
284+
(<|>) = append

0 commit comments

Comments
 (0)