@@ -20,7 +20,7 @@ Elm.Native.List = function(elm) {
21 function toArray(xs) {
21 function toArray(xs) {
22 var out = [];
22 var out = [];
23− while (xs.ctor === "Cons") {
23+ while (xs !== Nil) {
24 out.push(xs._0);
24 out.push(xs._0);
25 xs = xs._1;
25 xs = xs._1;
@@ -45,11 +45,11 @@ Elm.Native.List = function(elm) {
46 function append(xs,ys) {
46 function append(xs,ys) {
47 if (typeof xs === "string") { return xs.concat(ys); }
47 if (typeof xs === "string") { return xs.concat(ys); }
48− if (xs.ctor === "Nil") { return ys; }
48+ if (xs === Nil) { return ys; }
49 var root = Cons(xs._0. Nil);
49 var root = Cons(xs._0. Nil);
50 var curr = root;
50 var curr = root;
51 xs = xs._1;
51 xs = xs._1;
52− while (xs.ctor==="Cons") {
52+ while (xs !== Nil) {
53 curr._1 = Cons(xs._0. Nil);
53 curr._1 = Cons(xs._0. Nil);
54 xs = xs._1;
54 xs = xs._1;
55 curr = curr._1;
55 curr = curr._1;
@@ -58,13 +58,13 @@ Elm.Native.List = function(elm) {
58 return root;
58 return root;
61− function head(v) { return v.ctor === "Nil" ? throwError('head') : v._0; }
61+ function head(v) { return v === Nil ? throwError('head') : v._0; }
62− function tail(v) { return v.ctor === "Nil" ? throwError('tail') : v._1; }
62+ function tail(v) { return v === Nil ? throwError('tail') : v._1; }
64 function last(xs) {
64 function last(xs) {
65− if (xs.ctor === "Nil") { throwError('last'); }
65+ if (xs === Nil) { throwError('last'); }
66 var out = xs._0;
66 var out = xs._0;
67− while (xs.ctor === "Cons") {
67+ while (xs !== Nil) {
68 out = xs._0;
68 out = xs._0;
69 xs = xs._1;
69 xs = xs._1;
@@ -73,17 +73,19 @@ Elm.Native.List = function(elm) {
74 function map(f, xs) {
74 function map(f, xs) {
75 var arr = [];
75 var arr = [];
76− while (xs.ctor === "Cons") {
76+ while (xs !== Nil) {
77 arr.push(f(xs._0));
77 arr.push(f(xs._0));
78 xs = xs._1;
78 xs = xs._1;
80 return fromArray(arr);
80 return fromArray(arr);
83+ // f defined similarly for both foldl and foldr (NB: different from Haskell)
84+ // ie, foldl :: (a -> b -> b) -> b -> [a] -> b
83 function foldl(f, b, xs) {
85 function foldl(f, b, xs) {
84 var acc = b;
86 var acc = b;
85− while (xs.ctor === "Cons") {
87+ while (xs !== Nil) {
86− acc = A2(f, acc, xs._0);
88+ acc = A2(f, xs._0, acc);
87 xs = xs._1;
89 xs = xs._1;
89 return acc;
91 return acc;
@@ -99,11 +101,11 @@ Elm.Native.List = function(elm) {
101 function foldl1(f, xs) {
103 function foldl1(f, xs) {
102− return xs.ctor === "Nil" ? throwError('foldl1') : foldl(f, xs._0, xs._1);
104+ return xs === Nil ? throwError('foldl1') : foldl(f, xs._0, xs._1);
105 function foldr1(f, xs) {
107 function foldr1(f, xs) {
106− if (xs.ctor === "Nil") { throwError('foldr1'); }
108+ if (xs === Nil) { throwError('foldr1'); }
107 var arr = toArray(xs);
109 var arr = toArray(xs);
108 var acc = arr.pop();
110 var acc = arr.pop();
109 for (var i = arr.length; i--; ) {
111 for (var i = arr.length; i--; ) {
@@ -123,12 +125,12 @@ Elm.Native.List = function(elm) {
125 function scanl1(f, xs) {
127 function scanl1(f, xs) {
126− return xs.ctor === "Nil" ? throwError('scanl1') : scanl(f, xs._0, xs._1);
128+ return xs === Nil ? throwError('scanl1') : scanl(f, xs._0, xs._1);
129 function filter(pred, xs) {
131 function filter(pred, xs) {
130 var arr = [];
132 var arr = [];
131− while (xs.ctor === "Cons") {
133+ while (xs !== Nil) {
132 if (pred(xs._0)) { arr.push(xs._0); }
134 if (pred(xs._0)) { arr.push(xs._0); }
133 xs = xs._1;
135 xs = xs._1;
@@ -137,7 +139,7 @@ Elm.Native.List = function(elm) {
138 function length(xs) {
140 function length(xs) {
139 var out = 0;
141 var out = 0;
140− while (xs.ctor === "Cons") {
142+ while (xs !== Nil) {
141 out += 1;
143 out += 1;
142 xs = xs._1;
144 xs = xs._1;
@@ -145,7 +147,7 @@ Elm.Native.List = function(elm) {
147 function member(x, xs) {
149 function member(x, xs) {
148− while (xs.ctor === "Cons") {
150+ while (xs !== Nil) {
149 if (Utils.eq(x,xs._0)) return true;
151 if (Utils.eq(x,xs._0)) return true;
150 xs = xs._1;
152 xs = xs._1;
@@ -155,7 +157,7 @@ Elm.Native.List = function(elm) {
155 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
157 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
157 function concat(xss) {
159 function concat(xss) {
158− if (xss.ctor === 'Nil') return xss;
160+ if (xss === Nil) return xss;
159 var arr = toArray(xss);
161 var arr = toArray(xss);
160 var xs = arr[arr.length-1];
162 var xs = arr[arr.length-1];
161 for (var i = arr.length-1; i--; ) {
163 for (var i = arr.length-1; i--; ) {
@@ -165,7 +167,7 @@ Elm.Native.List = function(elm) {
167 function all(pred, xs) {
169 function all(pred, xs) {
168− while (xs.ctor === "Cons") {
170+ while (xs !== Nil) {
169 if (!pred(xs._0)) return false;
171 if (!pred(xs._0)) return false;
170 xs = xs._1;
172 xs = xs._1;
@@ -173,7 +175,7 @@ Elm.Native.List = function(elm) {
175 function any(pred, xs) {
177 function any(pred, xs) {
176− while (xs.ctor === "Cons") {
178+ while (xs !== Nil) {
177 if (pred(xs._0)) return true;
179 if (pred(xs._0)) return true;
178 xs = xs._1;
180 xs = xs._1;
@@ -182,7 +184,7 @@ Elm.Native.List = function(elm) {
183 function zipWith(f, xs, ys) {
185 function zipWith(f, xs, ys) {
184 var arr = [];
186 var arr = [];
185− while (xs.ctor === "Cons" && ys.ctor === "Cons") {
187+ while (xs !== Nil && ys !== Nil) {
186 arr.push(A2(f, xs._0, ys._0));
188 arr.push(A2(f, xs._0, ys._0));
187 xs = xs._1;
189 xs = xs._1;
188 ys = ys._1;
190 ys = ys._1;
@@ -192,7 +194,7 @@ Elm.Native.List = function(elm) {
193 function zip(xs, ys) {
195 function zip(xs, ys) {
194 var arr = [];
196 var arr = [];
195− while (xs.ctor === "Cons" && ys.ctor === "Cons") {
197+ while (xs !== Nil && ys !== Nil) {
196 arr.push(Utils.Tuple2(xs._0, ys._0));
198 arr.push(Utils.Tuple2(xs._0, ys._0));
197 xs = xs._1;
199 xs = xs._1;
198 ys = ys._1;
200 ys = ys._1;
@@ -202,15 +204,15 @@ Elm.Native.List = function(elm) {
203 function sort(xs) {
205 function sort(xs) {
204 function cmp(a,b) {
206 function cmp(a,b) {
205− var ord = Utils.compare(a,b);
207+ var ord = Utils.compare(a,b).ctor;
206− return ord.ctor === 'EQ' ? 0 : ord.ctor === 'LT' ? -1 : 1;
208+ return ord=== 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
208 return fromArray(toArray(xs).sort(cmp));
210 return fromArray(toArray(xs).sort(cmp));
211 function take(n, xs) {
213 function take(n, xs) {
212 var arr = [];
214 var arr = [];
213− while (xs.ctor === "Cons" && n > 0) {
215+ while (xs !== Nil && n > 0) {
214 arr.push(xs._0);
216 arr.push(xs._0);
215 xs = xs._1;
217 xs = xs._1;
@@ -219,7 +221,7 @@ Elm.Native.List = function(elm) {
221 function drop(n, xs) {
223 function drop(n, xs) {
222− while (xs.ctor === "Cons" && n > 0) {
224+ while (xs !== Nil && n > 0) {
223 xs = xs._1;
225 xs = xs._1;
@@ -227,11 +229,11 @@ Elm.Native.List = function(elm) {
229 function join(sep, xss) {
231 function join(sep, xss) {
230− if (xss.ctor === 'Nil') return Nil;
232+ if (xss === Nil) return Nil;
231 var s = toArray(sep);
233 var s = toArray(sep);
232 var out = toArray(xss._0);
234 var out = toArray(xss._0);
233 xss = xss._1;
235 xss = xss._1;
234− while (xss.ctor === "Cons") {
236+ while (xss !== Nil) {
235 out = out.concat(s, toArray(xss._0));
237 out = out.concat(s, toArray(xss._0));
236 xss = xss._1;
238 xss = xss._1;