2Elm.Native.List = function(elm) {
5 elm.Native = elm.Native || {};
6 if (elm.Native.List) return elm.Native.List;
8 var Utils = Elm.Native.Utils(elm);
10 var Nil = { ctor:'Nil' };
11 function Cons(hd,tl) { return { ctor:"Cons", _0:hd, _1:tl }; }
13 function throwError(f) {
14 throw new Error("Function '" + f + "' expects a non-empty list!");
17 function toArray(xs) {
19 while (xs.ctor === "Cons") {
26 function fromArray(arr) {
28 for (var i = arr.length; i--; ) {
29 out = Cons(arr[i], out);
34 function range(lo,hi) {
37 do { lst = Cons(hi,lst) } while (hi-->lo);
42 function append(xs,ys) {
43 if (typeof xs === "string") { return xs.concat(ys); }
44 if (xs.ctor === "Nil") { return ys; }
45 var root = Cons(xs._0. Nil);
48 while (xs.ctor==="Cons") {
49 curr._1 = Cons(xs._0. Nil);
57 function head(v) { return v.ctor === "Nil" ? throwError('head') : v._0; }
58 function tail(v) { return v.ctor === "Nil" ? throwError('tail') : v._1; }
61 if (xs.ctor === "Nil") { throwError('last'); }
63 while (xs.ctor === "Cons") {
72 while (xs.ctor === "Cons") {
76 return fromArray(arr);
79 function foldl(f, b, xs) {
81 while (xs.ctor === "Cons") {
88 function foldr(f, b, xs) {
89 var arr = toArray(xs);
91 for (var i = arr.length; i--; ) {
97 function foldl1(f, xs) {
98 return xs.ctor === "Nil" ? throwError('foldl1') : foldl(f, xs._0, xs._1);
101 function foldr1(f, xs) {
102 if (xs.ctor === "Nil") { throwError('foldr1'); }
103 var arr = toArray(xs);
105 for (var i = arr.length; i--; ) {
106 acc = A2(f, arr[i], acc);
111 function scanl(f, b, xs) {
112 var arr = toArray(xs);
114 var len = arr.length;
115 for (var i = 1; i < len; ++i) {
116 arr[i] = A2(f, arr[i], arr[i-1]);
118 return fromArray(arr);
121 function scanl1(f, xs) {
122 return xs.ctor === "Nil" ? throwError('scanl1') : scanl(f, xs._0, xs._1);
125 function filter(pred, xs) {
127 while (xs.ctor === "Cons") {
128 if (pred(xs._0)) { arr.push(xs._0); }
131 return fromArray(arr);
134 function length(xs) {
136 while (xs.ctor === "Cons") {
143 function member(x, xs) {
145 while (xs.ctor === "Cons") {
146 if (Utils.eq(x,xs._0)) return true;
152 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
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);
164 function all(pred, xs) {
165 while (xs.ctor === "Cons") {
166 if (!pred(xs._0)) return false;
172 function any(pred, xs) {
173 while (xs.ctor === "Cons") {
174 if (pred(xs._0)) return true;
180 function zipWith(f, xs, ys) {
182 while (xs.ctor === "Cons" && ys.ctor === "Cons") {
183 arr.push(A2(f, xs._0, ys._0));
187 return fromArray(arr);
190 function zip(xs, ys) {
192 while (xs.ctor === "Cons" && ys.ctor === "Cons") {
193 arr.push(Utils.Tuple2(xs._0, ys._0));
197 return fromArray(arr);
202 var ord = Utils.compare(a,b);
203 return ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;
205 return fromArray(toArray(xs).sort(cmp));
208 function take(n, xs) {
210 while (xs.ctor === "Cons" && n > 0) {
215 return fromArray(arr);
218 function drop(n, xs) {
219 while (xs.ctor === "Cons" && n > 0) {
226 function join(sep, xss) {
227 if (xss.ctor === 'Nil') return {ctor:'Nil'}
228 var s = toArray(sep);
229 var out = toArray(xss._0);
231 while (xss.ctor === "Cons") {
232 out = out.concat(s, toArray(xss._0));
235 return fromArray(out);
238 function split(sep, xs) {
239 var out = {ctor:'Nil'};
240 var array = toArray(xs);
241 var s = toArray(sep);
244 for (var i = array.length; i--; ) {
245 out = Cons(Cons(array[i],Nil), out);
249 var temp = {ctor:'Nil'};
250 for (var i = array.length - slen; i >= 0; --i) {
252 for (var j = slen; j--; ) {
253 if (!Utils.eq(array[i+j], s[j])) { match = false; break; }
256 out = {ctor:'Cons', _0:temp, _1:out};
260 temp = {ctor:'Cons', _0:array[i+j], _1:temp};
263 for (var j = slen-1; j--; ) {
264 temp = {ctor:'Cons', _0:array[j], _1:temp};
266 out = {ctor:'Cons', _0:temp, _1:out};
270 return elm.Native.List = {
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list