on master help sign in
Decide on convention that corresponding Native modules get exported automatically, no need to copy everything through in the Elm file.
944a056evancz
libraries/List.elm+14−49
@@ -4,66 +4,34 @@ module List where
4import Native.List as L
4import Native.List as L
5
5
6head : [a] -> a
6head : [a] -> a
7−head = L.head
8−
9tail : [a] -> [a]
7tail : [a] -> [a]
10−tail = L.tail
11−
12last : [a] -> a
8last : [a] -> a
13−last = L.last
14−
15−map : (a -> b) -> [a] -> [b]
9+map : (a -> b) -> [a] -> [b]
16−map = L.map
17−
18−foldl : (a -> b -> b) -> b -> [a] -> b
10+foldl : (a -> b -> b) -> b -> [a] -> b
19−foldl = L.foldl
20−
21−foldr : (a -> b -> b) -> b -> [a] -> b
11+foldr : (a -> b -> b) -> b -> [a] -> b
22−foldr = L.foldr
23−
24foldl1 : (a -> a -> a) -> [a] -> a
12foldl1 : (a -> a -> a) -> [a] -> a
25−foldl1 = L.foldl1
26−
27foldr1 : (a -> a -> a) -> [a] -> a
13foldr1 : (a -> a -> a) -> [a] -> a
28−foldr1 = L.foldr1
29−
30−scanl : (a -> b -> b) -> b -> [a] -> [b]
31−scanl = L.scanl
32
14
15+scanl : (a -> b -> b) -> b -> [a] -> [b]
33scanl1 : (a -> a -> a) -> [a] -> [a]
16scanl1 : (a -> a -> a) -> [a] -> [a]
34−scanl1 = L.scanl1
35−
36−filter : (a -> Bool) -> [a] -> [a]
37−filter = L.filter
38−
39−length : [a] -> Int
40−length = L.length
41
17
18+filter : (a -> Bool) -> [a] -> [a]
19+length : [a] -> Int
42reverse : [a] -> [a]
20reverse : [a] -> [a]
43−reverse = L.reverse
44−
45−concat : [[a]] -> [a]
46−concat = L.foldr (++) []
47−
48−concatMap : (a -> [b]) -> [a] -> [b]
49−concatMap f = concat . L.map f
50
21
51all : (a -> Bool) -> [a] -> Bool
22all : (a -> Bool) -> [a] -> Bool
52−all pred = L.all
53−
54any : (a -> Bool) -> [a] -> Bool
23any : (a -> Bool) -> [a] -> Bool
55−any = L.any
56−
57and : [Bool] -> Bool
24and : [Bool] -> Bool
58−and = L.all id
25+or : [Bool] -> Bool
59
26
60−or : [Bool] -> Bool
27+concat : [[a]] -> [a]
61−or = L.any id
28+concatMap : (a -> [b]) -> [a] -> [b]
29+concatMap f = L.concat . L.map f
62
30
63−sum = foldl (+) 0
31+sum = L.foldl (+) 0
64−product = foldl (*) 1
32+product = L.foldl (*) 1
65−maximum = foldl1 max
33+maximum = L.foldl1 max
66−minimum = foldl1 min
34+minimum = L.foldl1 min
67
35
68partition : (a -> Bool) -> [a] -> ([a],[a])
36partition : (a -> Bool) -> [a] -> ([a],[a])
69partition pred lst =
37partition pred lst =
@@ -73,10 +41,7 @@ partition pred lst =
73 if pred x then (x::bs,cs) else (bs,x::cs)
41 if pred x then (x::bs,cs) else (bs,x::cs)
74
42
75zipWith : (a -> b -> c) -> [a] -> [b] -> [c]
43zipWith : (a -> b -> c) -> [a] -> [b] -> [c]
76−zipWith = L.zipWith
77−
78zip : [a] -> [b] -> [(a,b)]
44zip : [a] -> [b] -> [(a,b)]
79−zip = L.zip
80
45
81unzip : [(a,b)] -> ([a],[b])
46unzip : [(a,b)] -> ([a],[b])
82unzip pairs =
47unzip pairs =
libraries/Native/List.js+19−4
@@ -5,7 +5,7 @@ Elm.Native.List = function(elm) {
5 elm.Native = elm.Native || {};
5 elm.Native = elm.Native || {};
6 if (elm.Native.List) return elm.Native.List;
6 if (elm.Native.List) return elm.Native.List;
7
7
8− var eq = elm.Native.Utils(elm).eq;
8+ var Utils = elm.Native.Utils(elm);
9
9
10 var Nil = { ctor:'Nil' };
10 var Nil = { ctor:'Nil' };
11 function Cons(hd,tl) { return { ctor:"Cons", _0:hd, _1:tl }; }
11 function Cons(hd,tl) { return { ctor:"Cons", _0:hd, _1:tl }; }
@@ -143,13 +143,23 @@ Elm.Native.List = function(elm) {
143 function member(x, xs) {
143 function member(x, xs) {
144 var out = 0;
144 var out = 0;
145 while (xs.ctor === "Cons") {
145 while (xs.ctor === "Cons") {
146− if (eq(x,xs._0)) return true;
146+ if (Utils.eq(x,xs._0)) return true;
147 xs = xs._1;
147 xs = xs._1;
148 }
148 }
149 return false;
149 return false;
150 }
150 }
151
151
152 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
152 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
153+
154+ function concat(xss) {
155+ if (xss.ctor === 'Nil') return xss;
156+ var arr = toArray(xss);
157+ var xs = arr[arr.length-1];
158+ for (var i = arr.length-1; i--; ) {
159+ xs = append(arr[i], xs);
160+ }
161+ return xs;
162+ }
153
163
154 function all(pred, xs) {
164 function all(pred, xs) {
155 while (xs.ctor === "Cons") {
165 while (xs.ctor === "Cons") {
@@ -180,7 +190,7 @@ Elm.Native.List = function(elm) {
180 function zip(xs, ys) {
190 function zip(xs, ys) {
181 var arr = [];
191 var arr = [];
182 while (xs.ctor === "Cons" && ys.ctor === "Cons") {
192 while (xs.ctor === "Cons" && ys.ctor === "Cons") {
183− arr.push({ ctor:'Tuple2', _0:xs._0, _1:ys._0 });
193+ arr.push(Utils.Tuple2(xs._0, ys._0));
184 xs = xs._1;
194 xs = xs._1;
185 ys = ys._1;
195 ys = ys._1;
186 }
196 }
@@ -188,7 +198,11 @@ Elm.Native.List = function(elm) {
188 }
198 }
189
199
190 function sort(xs) {
200 function sort(xs) {
191− return fromArray(toArray(xs).sort(function(a,b) { return a - b}));
201+ function cmp(a,b) {
202+ var ord = Utils.compare(a,b);
203+ return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
204+ }
205+ return fromArray(toArray(xs).sort(cmp));
192 }
206 }
193
207
194 function take(n, xs) {
208 function take(n, xs) {
@@ -233,6 +247,7 @@ Elm.Native.List = function(elm) {
233 length:length,
247 length:length,
234 member:member,
248 member:member,
235 reverse:reverse,
249 reverse:reverse,
250+ concat:concat,
236
251
237 all:F2(all),
252 all:F2(all),
238 any:F2(any),
253 any:F2(any),