Switch to new ADT format
This commit is contained in:
parent
05c6e2da98
commit
9c105aeb9b
2 changed files with 49 additions and 47 deletions
|
@ -1,8 +1,9 @@
|
|||
function nativeColor(elm) {
|
||||
"use strict";
|
||||
|
||||
function extract(c) {
|
||||
if (c[4] === 1) { return 'rgb(' + c[1] + ',' + c[2] + ',' + c[3] + ')'; }
|
||||
return 'rgba(' + c[1] + ',' + c[2] + ',' + c[3] + ',' + c[4] + ')';
|
||||
if (c._3 === 1) { return 'rgb(' + c._0 + ',' + c._1 + ',' + c._2 + ')'; }
|
||||
return 'rgba(' + c._0 + ',' + c._1 + ',' + c._2 + ',' + c._3 + ')';
|
||||
}
|
||||
function complement(rgb) {
|
||||
var hsv = toHSV(rgb);
|
||||
|
@ -12,7 +13,7 @@ function complement(rgb) {
|
|||
|
||||
function hsva(h) { return function(s) { return function(v) { return function(a) {
|
||||
var clr = toRGB({hue:h, saturation:s, value:v});
|
||||
clr[4] = a;
|
||||
clr._3 = a;
|
||||
return clr;
|
||||
}; }; };
|
||||
}
|
||||
|
@ -22,7 +23,7 @@ function hsv(h) { return function(s) { return function(v) {
|
|||
|
||||
function toHSV(rgb) {
|
||||
var hsv = {};
|
||||
var r = rgb[1] / 255.0, g = rgb[2] / 255.0, b = rgb[3] / 255.0;
|
||||
var r = rgb._0 / 255.0, g = rgb._1 / 255.0, b = rgb._2 / 255.0;
|
||||
var M = Math.max(r,g,b);
|
||||
var m = Math.min(r,g,b);
|
||||
var c = M - m;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
function nativeList(elm) {
|
||||
"use strict";
|
||||
|
||||
function throwError(f) {
|
||||
throw new Error("Function '" + f + "' expects a non-empty list!");
|
||||
|
@ -6,9 +7,9 @@ function nativeList(elm) {
|
|||
|
||||
function toArray(xs) {
|
||||
var out = [];
|
||||
while (xs[0] === "Cons") {
|
||||
out.push(xs[1]);
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons") {
|
||||
out.push(xs._0);
|
||||
xs = xs._1;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
@ -21,24 +22,24 @@ function nativeList(elm) {
|
|||
return out;
|
||||
}
|
||||
|
||||
function head(v) { v[0] === "Nil" ? throwError('head') : return v[1]; }
|
||||
function tail(v) { v[0] === "Nil" ? throwError('tail') : return v[2]; }
|
||||
function head(v) { v.ctor === "Nil" ? throwError('head') : return v._0; }
|
||||
function tail(v) { v.ctor === "Nil" ? throwError('tail') : return v._1; }
|
||||
|
||||
function last(xs) {
|
||||
if (xs[0] === "Nil") { throwError('last'); }
|
||||
var out = xs[1];
|
||||
while (xs[0] === "Cons") {
|
||||
out = xs[1];
|
||||
xs = xs[2];
|
||||
if (xs.ctor === "Nil") { throwError('last'); }
|
||||
var out = xs._0;
|
||||
while (xs.ctor === "Cons") {
|
||||
out = xs._0;
|
||||
xs = xs._1;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
function map(f) { return function(xs) {
|
||||
var arr = [];
|
||||
while (xs[0] === "Cons") {
|
||||
arr.push(f(xs[1]));
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons") {
|
||||
arr.push(f(xs._0));
|
||||
xs = xs._1;
|
||||
}
|
||||
return fromArray(arr);
|
||||
}
|
||||
|
@ -46,9 +47,9 @@ function nativeList(elm) {
|
|||
|
||||
function foldl(f) { return function(b) { return function(xs) {
|
||||
var acc = b;
|
||||
while (xs[0] === "Cons") {
|
||||
acc = f(xs[1])(acc);
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons") {
|
||||
acc = f(xs._0)(acc);
|
||||
xs = xs._1;
|
||||
}
|
||||
return acc;
|
||||
}
|
||||
|
@ -67,12 +68,12 @@ function nativeList(elm) {
|
|||
}
|
||||
|
||||
function foldl1(f) { return function(xs) {
|
||||
xs[0] === "Nil" ? throwError('foldl1') : return foldl(f)(xs[1])(xs[2]);
|
||||
xs.ctor === "Nil" ? throwError('foldl1') : return foldl(f)(xs._0)(xs._1);
|
||||
}
|
||||
}
|
||||
|
||||
function foldr1(f) { return function(xs) {
|
||||
if (xs[0] === "Nil") { throwError('foldr1'); }
|
||||
if (xs.ctor === "Nil") { throwError('foldr1'); }
|
||||
var arr = toArray(xs);
|
||||
var acc = arr.pop();
|
||||
for (var i = arr.length; i--; ) {
|
||||
|
@ -95,15 +96,15 @@ function nativeList(elm) {
|
|||
}
|
||||
|
||||
function scanl1(f) { return function(xs) {
|
||||
xs[0] === "Nil" ? throwError('scanl1') : return scanl(f)(xs[1])(xs[2]);
|
||||
xs.ctor === "Nil" ? throwError('scanl1') : return scanl(f)(xs._0)(xs._1);
|
||||
}
|
||||
}
|
||||
|
||||
function filter(pred) { return function(xs) {
|
||||
var arr = [];
|
||||
while (xs[0] === "Cons") {
|
||||
if (pred(xs[1])) { arr.push(xs[1]); }
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons") {
|
||||
if (pred(xs._0)) { arr.push(xs._0); }
|
||||
xs = xs._1;
|
||||
}
|
||||
return fromArray(arr);
|
||||
}
|
||||
|
@ -111,9 +112,9 @@ function nativeList(elm) {
|
|||
|
||||
function length(xs) {
|
||||
var out = 0;
|
||||
while (xs[0] === "Cons") {
|
||||
while (xs.ctor === "Cons") {
|
||||
out += 1;
|
||||
xs = xs[2];
|
||||
xs = xs._1;
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
@ -121,18 +122,18 @@ function nativeList(elm) {
|
|||
function reverse(xs) { return fromArray(toArray(xs).reverse()); }
|
||||
|
||||
function all(pred) { return function(xs) {
|
||||
while (xs[0] === "Cons") {
|
||||
if (!pred(xs[1])) return false;
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons") {
|
||||
if (!pred(xs._0)) return false;
|
||||
xs = xs._1;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
function any(pred) { return function(xs) {
|
||||
while (xs[0] === "Cons") {
|
||||
if (pred(xs[1])) return true;
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons") {
|
||||
if (pred(xs._0)) return true;
|
||||
xs = xs._1;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -140,10 +141,10 @@ function nativeList(elm) {
|
|||
|
||||
function zipWith(f) { return function(xs) { return function(ys) {
|
||||
var arr = [];
|
||||
while (xs[0] === "Cons" && ys[0] === "Cons") {
|
||||
arr.push(f(xs[1])(ys[1]));
|
||||
xs = xs[2];
|
||||
ys = ys[2];
|
||||
while (xs.ctor === "Cons" && ys.ctor === "Cons") {
|
||||
arr.push(f(xs._0)(ys._0));
|
||||
xs = xs._1;
|
||||
ys = ys._1;
|
||||
}
|
||||
return fromArray(arr);
|
||||
}
|
||||
|
@ -152,10 +153,10 @@ function nativeList(elm) {
|
|||
|
||||
function zip(xs) { return function(ys) {
|
||||
var arr = [];
|
||||
while (xs[0] === "Cons" && ys[0] === "Cons") {
|
||||
arr.push(["Tuple2",xs[1],ys[1]]);
|
||||
xs = xs[2];
|
||||
ys = ys[2];
|
||||
while (xs.ctor === "Cons" && ys.ctor === "Cons") {
|
||||
arr.push(["Tuple2",xs._0,ys._0]);
|
||||
xs = xs._1;
|
||||
ys = ys._1;
|
||||
}
|
||||
return fromArray(arr);
|
||||
}
|
||||
|
@ -167,9 +168,9 @@ function nativeList(elm) {
|
|||
|
||||
function take(n) { return function(xs) {
|
||||
var arr = [];
|
||||
while (xs[0] === "Cons" && n > 0) {
|
||||
arr.push(xs[1]);
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons" && n > 0) {
|
||||
arr.push(xs._0);
|
||||
xs = xs._1;
|
||||
--n;
|
||||
}
|
||||
return fromArray(arr);
|
||||
|
@ -177,8 +178,8 @@ function nativeList(elm) {
|
|||
}
|
||||
|
||||
function drop(n) { return function(xs) {
|
||||
while (xs[0] === "Cons" && n > 0) {
|
||||
xs = xs[2];
|
||||
while (xs.ctor === "Cons" && n > 0) {
|
||||
xs = xs._1;
|
||||
--n;
|
||||
}
|
||||
return xs;
|
||||
|
|
Loading…
Reference in a new issue