11module 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+
4356singleton :: forall a . a -> [a ]
4457singleton a = [a]
4558
4659head :: forall a . [a ] -> Maybe a
4760head (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
5068tail :: forall a . [a ] -> Maybe [a ]
5169tail (_ : 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
6680foreign 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+
7885foreign 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
106122foreign 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
178206foreign 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-
196220range :: Number -> Number -> [Number ]
197221range lo hi | lo > hi = []
198222range lo hi = lo : range (lo + 1 ) hi
@@ -250,11 +274,11 @@ instance bindArray :: Bind [] where
250274instance monadArray :: Monad []
251275
252276instance semigroupArray :: Semigroup [a ] where
253- (<>) = concat
277+ (<>) = append
254278
255279instance monoidArray :: Monoid [a ] where
256280 mempty = []
257281
258282instance alternativeArray :: Alternative [] where
259283 empty = []
260- (<|>) = concat
284+ (<|>) = append
0 commit comments