Switch to new ADT format

This commit is contained in:
evancz 2013-02-20 23:39:00 +01:00
parent 05c6e2da98
commit 9c105aeb9b
2 changed files with 49 additions and 47 deletions

View file

@ -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;

View file

@ -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;