@@ -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),