@@ -20,7 +20,7 @@ Elm.Native.List = function(elm) {
2020
2121 function toArray(xs) {
2222 var out = [];
23− while (xs.ctor === "Cons") {
23+ while (xs !== Nil) {
2424 out.push(xs._0);
2525 xs = xs._1;
2626 }
@@ -45,11 +45,11 @@ Elm.Native.List = function(elm) {
4545
4646 function append(xs,ys) {
4747 if (typeof xs === "string") { return xs.concat(ys); }
48− if (xs.ctor === "Nil") { return ys; }
48+ if (xs === Nil) { return ys; }
4949 var root = Cons(xs._0. Nil);
5050 var curr = root;
5151 xs = xs._1;
52− while (xs.ctor==="Cons") {
52+ while (xs !== Nil) {
5353 curr._1 = Cons(xs._0. Nil);
5454 xs = xs._1;
5555 curr = curr._1;
@@ -58,13 +58,13 @@ Elm.Native.List = function(elm) {
5858 return root;
5959 }
6060
61− function head(v) { return v.ctor === "Nil" ? throwError('head') : v._0; }
62− function tail(v) { return v.ctor === "Nil" ? throwError('tail') : v._1; }
61+ function head(v) { return v === Nil ? throwError('head') : v._0; }
62+ function tail(v) { return v === Nil ? throwError('tail') : v._1; }
6363
6464 function last(xs) {
65− if (xs.ctor === "Nil") { throwError('last'); }
65+ if (xs === Nil) { throwError('last'); }
6666 var out = xs._0;
67− while (xs.ctor === "Cons") {
67+ while (xs !== Nil) {
6868 out = xs._0;
6969 xs = xs._1;
7070 }
@@ -73,17 +73,19 @@ Elm.Native.List = function(elm) {
7373
7474 function map(f, xs) {
7575 var arr = [];
76− while (xs.ctor === "Cons") {
76+ while (xs !== Nil) {
7777 arr.push(f(xs._0));
7878 xs = xs._1;
7979 }
8080 return fromArray(arr);
8181 }
8282
83+ // f defined similarly for both foldl and foldr (NB: different from Haskell)
84+ // ie, foldl :: (a -> b -> b) -> b -> [a] -> b
8385 function foldl(f, b, xs) {
8486 var acc = b;
85− while (xs.ctor === "Cons") {
86− acc = A2(f, acc, xs._0);
87+ while (xs !== Nil) {
88+ acc = A2(f, xs._0, acc);
8789 xs = xs._1;
8890 }
8991 return acc;
@@ -99,11 +101,11 @@ Elm.Native.List = function(elm) {
99101 }
100102
101103 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);
103105 }
104106
105107 function foldr1(f, xs) {
106− if (xs.ctor === "Nil") { throwError('foldr1'); }
108+ if (xs === Nil) { throwError('foldr1'); }
107109 var arr = toArray(xs);
108110 var acc = arr.pop();
109111 for (var i = arr.length; i--; ) {
@@ -123,12 +125,12 @@ Elm.Native.List = function(elm) {
123125 }
124126
125127 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);
127129 }
128130
129131 function filter(pred, xs) {
130132 var arr = [];
131− while (xs.ctor === "Cons") {
133+ while (xs !== Nil) {
132134 if (pred(xs._0)) { arr.push(xs._0); }
133135 xs = xs._1;
134136 }
@@ -137,7 +139,7 @@ Elm.Native.List = function(elm) {
137139
138140 function length(xs) {
139141 var out = 0;
140− while (xs.ctor === "Cons") {
142+ while (xs !== Nil) {
141143 out += 1;
142144 xs = xs._1;
143145 }
@@ -145,7 +147,7 @@ Elm.Native.List = function(elm) {
145147 }
146148
147149 function member(x, xs) {
148− while (xs.ctor === "Cons") {
150+ while (xs !== Nil) {
149151 if (Utils.eq(x,xs._0)) return true;
150152 xs = xs._1;
151153 }
@@ -155,7 +157,7 @@ Elm.Native.List = function(elm) {
155157 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
156158
157159 function concat(xss) {
158− if (xss.ctor === 'Nil') return xss;
160+ if (xss === Nil) return xss;
159161 var arr = toArray(xss);
160162 var xs = arr[arr.length-1];
161163 for (var i = arr.length-1; i--; ) {
@@ -165,7 +167,7 @@ Elm.Native.List = function(elm) {
165167 }
166168
167169 function all(pred, xs) {
168− while (xs.ctor === "Cons") {
170+ while (xs !== Nil) {
169171 if (!pred(xs._0)) return false;
170172 xs = xs._1;
171173 }
@@ -173,7 +175,7 @@ Elm.Native.List = function(elm) {
173175 }
174176
175177 function any(pred, xs) {
176− while (xs.ctor === "Cons") {
178+ while (xs !== Nil) {
177179 if (pred(xs._0)) return true;
178180 xs = xs._1;
179181 }
@@ -182,7 +184,7 @@ Elm.Native.List = function(elm) {
182184
183185 function zipWith(f, xs, ys) {
184186 var arr = [];
185− while (xs.ctor === "Cons" && ys.ctor === "Cons") {
187+ while (xs !== Nil && ys !== Nil) {
186188 arr.push(A2(f, xs._0, ys._0));
187189 xs = xs._1;
188190 ys = ys._1;
@@ -192,7 +194,7 @@ Elm.Native.List = function(elm) {
192194
193195 function zip(xs, ys) {
194196 var arr = [];
195− while (xs.ctor === "Cons" && ys.ctor === "Cons") {
197+ while (xs !== Nil && ys !== Nil) {
196198 arr.push(Utils.Tuple2(xs._0, ys._0));
197199 xs = xs._1;
198200 ys = ys._1;
@@ -202,15 +204,15 @@ Elm.Native.List = function(elm) {
202204
203205 function sort(xs) {
204206 function cmp(a,b) {
205− var ord = Utils.compare(a,b);
206− return ord.ctor === 'EQ' ? 0 : ord.ctor === 'LT' ? -1 : 1;
207+ var ord = Utils.compare(a,b).ctor;
208+ return ord=== 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
207209 }
208210 return fromArray(toArray(xs).sort(cmp));
209211 }
210212
211213 function take(n, xs) {
212214 var arr = [];
213− while (xs.ctor === "Cons" && n > 0) {
215+ while (xs !== Nil && n > 0) {
214216 arr.push(xs._0);
215217 xs = xs._1;
216218 --n;
@@ -219,7 +221,7 @@ Elm.Native.List = function(elm) {
219221 }
220222
221223 function drop(n, xs) {
222− while (xs.ctor === "Cons" && n > 0) {
224+ while (xs !== Nil && n > 0) {
223225 xs = xs._1;
224226 --n;
225227 }
@@ -227,11 +229,11 @@ Elm.Native.List = function(elm) {
227229 }
228230
229231 function join(sep, xss) {
230− if (xss.ctor === 'Nil') return Nil;
232+ if (xss === Nil) return Nil;
231233 var s = toArray(sep);
232234 var out = toArray(xss._0);
233235 xss = xss._1;
234− while (xss.ctor === "Cons") {
236+ while (xss !== Nil) {
235237 out = out.concat(s, toArray(xss._0));
236238 xss = xss._1;
237239 }