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.

Also extend `sort` to work on any comparable values.

commit944a05612295e8a4b9c7ed8402cdad23b026caa9 authorevancz <info@elm-lang.org> dateSun 10 Mar 2013, 00:12 (14 years ago) parenta5435e8
2 files changed+33−53
libraries/List.elm+14−49 libraries/Native/List.js+19−4
libraries/List.elm+14−49
@@ -4,66 +4,34 @@ module List where
44import Native.List as L
55
66head : [a] -> a
7−head = L.head
8−
97tail : [a] -> [a]
10−tail = L.tail
11−
128last : [a] -> a
13−last = L.last
14−
15−map : (a -> b) -> [a] -> [b]
16−map = L.map
17−
18−foldl : (a -> b -> b) -> b -> [a] -> b
19−foldl = L.foldl
20−
21−foldr : (a -> b -> b) -> b -> [a] -> b
22−foldr = L.foldr
23−
9+map : (a -> b) -> [a] -> [b]
10+foldl : (a -> b -> b) -> b -> [a] -> b
11+foldr : (a -> b -> b) -> b -> [a] -> b
2412foldl1 : (a -> a -> a) -> [a] -> a
25−foldl1 = L.foldl1
26−
2713foldr1 : (a -> a -> a) -> [a] -> a
28−foldr1 = L.foldr1
29−
30−scanl : (a -> b -> b) -> b -> [a] -> [b]
31−scanl = L.scanl
3214
15+scanl : (a -> b -> b) -> b -> [a] -> [b]
3316scanl1 : (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
4117
18+filter : (a -> Bool) -> [a] -> [a]
19+length : [a] -> Int
4220reverse : [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
5021
5122all : (a -> Bool) -> [a] -> Bool
52−all pred = L.all
53−
5423any : (a -> Bool) -> [a] -> Bool
55−any = L.any
56−
5724and : [Bool] -> Bool
58−and = L.all id
25+or : [Bool] -> Bool
5926
60−or : [Bool] -> Bool
61−or = L.any id
27+concat : [[a]] -> [a]
28+concatMap : (a -> [b]) -> [a] -> [b]
29+concatMap f = L.concat . L.map f
6230
63−sum = foldl (+) 0
64−product = foldl (*) 1
65−maximum = foldl1 max
66−minimum = foldl1 min
31+sum = L.foldl (+) 0
32+product = L.foldl (*) 1
33+maximum = L.foldl1 max
34+minimum = L.foldl1 min
6735
6836partition : (a -> Bool) -> [a] -> ([a],[a])
6937partition pred lst =
@@ -73,10 +41,7 @@ partition pred lst =
7341 if pred x then (x::bs,cs) else (bs,x::cs)
7442
7543zipWith : (a -> b -> c) -> [a] -> [b] -> [c]
76−zipWith = L.zipWith
77−
7844zip : [a] -> [b] -> [(a,b)]
79−zip = L.zip
8045
8146unzip : [(a,b)] -> ([a],[b])
8247unzip pairs =
libraries/Native/List.js+19−4
@@ -5,7 +5,7 @@ Elm.Native.List = function(elm) {
55 elm.Native = elm.Native || {};
66 if (elm.Native.List) return elm.Native.List;
77
8− var eq = elm.Native.Utils(elm).eq;
8+ var Utils = elm.Native.Utils(elm);
99
1010 var Nil = { ctor:'Nil' };
1111 function Cons(hd,tl) { return { ctor:"Cons", _0:hd, _1:tl }; }
@@ -143,13 +143,23 @@ Elm.Native.List = function(elm) {
143143 function member(x, xs) {
144144 var out = 0;
145145 while (xs.ctor === "Cons") {
146− if (eq(x,xs._0)) return true;
146+ if (Utils.eq(x,xs._0)) return true;
147147 xs = xs._1;
148148 }
149149 return false;
150150 }
151151
152152 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+ }
153163
154164 function all(pred, xs) {
155165 while (xs.ctor === "Cons") {
@@ -180,7 +190,7 @@ Elm.Native.List = function(elm) {
180190 function zip(xs, ys) {
181191 var arr = [];
182192 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));
184194 xs = xs._1;
185195 ys = ys._1;
186196 }
@@ -188,7 +198,11 @@ Elm.Native.List = function(elm) {
188198 }
189199
190200 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));
192206 }
193207
194208 function take(n, xs) {
@@ -233,6 +247,7 @@ Elm.Native.List = function(elm) {
233247 length:length,
234248 member:member,
235249 reverse:reverse,
250+ concat:concat,
236251
237252 all:F2(all),
238253 any:F2(any),