Skip to content

Instantly share code, notes, and snippets.

@wavebeem
Created July 15, 2015 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wavebeem/489580d3b95fdf8cfea3 to your computer and use it in GitHub Desktop.
Save wavebeem/489580d3b95fdf8cfea3 to your computer and use it in GitHub Desktop.
A simple addition calculator
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Wobsite</title>
</head>
<body>
<h1>Wobsite</h1>
<input type="number" id="number-1" value="1">
<input type="number" id="number-2" value="2">
<span id="sum"></span>
<script>var module = {};</script>
<script src="main.js"></script>
<script>module.exports.main();</script>
</body>
</html>
var global = (1, eval)('this');
var print = function (x) {
return LANG$$log(x);
};
var not = function (x) {
return !!x;
};
var $lt = function (a, b) {
var ta = typeof a;
var tb = typeof b;
if (ta === tb && (ta === 'string' || ta === 'number')) {
return a < b;
}
throw new LANG$$js_Error('incorrect argument types for <');
};
var $gt = function (a, b) {
var ta = typeof a;
var tb = typeof b;
if (ta === tb && (ta === 'string' || ta === 'number')) {
return a > b;
}
throw new LANG$$js_Error('incorrect argument types for >');
};
var $lt$eq = function (a, b) {
return $lt(a, b) || a === b;
};
var $gt$eq = function (a, b) {
return $gt(a, b) || a === b;
};
var $bang$eq = function (a, b) {
return not($eq(a, b));
};
var not = function (x) {
return !LANG$$assert_boolean(x);
};
var $pipe$gt = function (x, f) {
if (typeof f !== 'function') {
throw new LANG$$js_Error('right-side not a function in |>');
}
return f(x);
};
var $at = function (f, x) {
if (typeof f !== 'function') {
throw new LANG$$js_Error('left-side not a function in @');
}
return f.bind(null, x);
};
var $ampersand = function (a, b) {
if (arguments.length !== 2) {
throw new LANG$$js_Error('wrong number of arguments for &');
}
return LANG$$assert_boolean(a) && LANG$$assert_boolean(b);
};
var $semicolon = function (a, b) {
return b;
};
var $pipe = function (a, b) {
if (arguments.length !== 2) {
throw new LANG$$js_Error('wrong number of arguments for |');
}
return LANG$$assert_boolean(a) || LANG$$assert_boolean(b);
};
var is = function recur(a, b) {
if (typeof a !== typeof b) {
return false;
}
if (a === b) {
return true;
}
if (a !== a && b !== b) {
return true;
}
if (LANG$$is_object(a) && LANG$$is_object(b)) {
var ks = LANG$$keys(a).concat(LANG$$keys(b)).sort();
return ks.every(function (k) {
return k in a && k in b && recur(a[k], b[k]);
});
}
return false;
};
var $eq = is;
var $plus = function (a, b) {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
}
throw new LANG$$js_Error('incorrect argument types for +');
};
var $plus$plus = function (a, b) {
var A = Array.isArray;
var S = function (x) {
return typeof x === 'string';
};
var aOk = A(a) && A(b);
var sOk = S(a) && S(b);
if (aOk || sOk) {
return a.concat(b);
}
throw new LANG$$js_Error('incorrect argument types for ++');
};
var $minus = function (a, b) {
return a - b;
};
var $star = function (a, b) {
return a * b;
};
var $slash = function (a, b) {
return a / b;
};
var map = function (f, xs) {
return xs.map(function (x) {
return f(x);
});
};
var fold_left = function (f, z, xs) {
xs.forEach(function (x) {
z = f(z, x);
});
return z;
};
var is_empty = function (xs) {
return xs.length === 0;
};
var head = function (xs) {
if (!is_empty(xs)) {
return xs[0];
}
throw new LANG$$js_Error('cannot get head of empty list');
};
var tail = function (xs) {
return [].slice.call(xs, 1);
};
var reduce = function (f, xs) {
return fold_left(f, head(xs), tail(xs));
};
var fold_right = function (f, z, xs) {
return fold_left(flip(f), z, reverse(xs));
};
var reverse = function (xs) {
return to_array(xs).reverse();
};
var to_array = function (xs) {
return [].slice.call(xs);
};
var flip = function (f) {
return function (x, y) {
return f(y, x);
};
};
var js_get = function (k, obj) {
if (k in obj) {
return obj[k];
}
throw new LANG$$js_Error('key ' + k + ' not in ' + obj);
};
var js_set = function (k, v, obj) {
if (obj === null || typeof obj !== 'object') {
throw new LANG$$js_Error('cannot set ' + k + ' on ' + obj);
}
obj[k] = v;
return obj;
};
var js_method_get = function (method, obj) {
return obj[method].bind(obj);
};
var js_method_call = function (method, obj, args) {
return obj[method].apply(obj, args);
};
var LANG$$object = function (data) {
if (!LANG$$is_array(data)) {
throw new LANG$$js_Error('objects can only be constructed from an array');
}
var obj = {};
var i = 0;
var n = data.length;
while (i < n) {
if (typeof data[i][0] !== 'string') {
throw new LANG$$js_Error('object keys must be strings: ' + data[i]);
}
obj[data[i][0]] = data[i][1];
i++;
}
return LANG$$freeze(obj);
};
var LANG$$is_object = function (x) {
if (arguments.length !== 1) {
throw new LANG$$js_Error('wrong number of arguments to LANG$$is_object');
}
return x !== null && typeof x === 'object';
};
var LANG$$assert_boolean = function (x) {
if (typeof x !== 'boolean') {
throw new LANG$$js_Error('not a boolean: ' + x);
}
return x;
};
var LANG$$freeze = Object.freeze;
var LANG$$create = Object.create;
var LANG$$is_array = Array.isArray;
var LANG$$keys = Object.keys;
var LANG$$js_get = js_get;
var LANG$$js_method_get = js_method_get;
var LANG$$js_method_call = js_method_call;
var LANG$$js_Error = Error;
var LANG$$custom_logger = null;
var LANG$$global = global;
var LANG$$log = function (x) {
if (LANG$$custom_logger) {
LANG$$custom_logger(x);
} else if (LANG$$global.console && LANG$$global.console.log) {
LANG$$global.console.log(x);
}
return x;
};
module.exports = function () {
var byId = LANG$$js_method_get('getElementById', LANG$$js_get('document', global));
var toNumber = function (x) {
if (arguments.length !== 1) {
throw new LANG$$js_Error('expected 1 argument(s), got ' + arguments.length);
}
return function () {
var y = LANG$$js_method_call('Number', global, LANG$$freeze([x]));
return $eq(y, NaN) ? 0 : y;
}();
};
var toNumber = LANG$$js_get('Number', global);
var listen = function (element, name, func) {
if (arguments.length !== 3) {
throw new LANG$$js_Error('expected 3 argument(s), got ' + arguments.length);
}
return $semicolon(LANG$$js_method_call('addEventListener', element, LANG$$freeze([
name,
func,
false
])), undefined);
};
var elements = LANG$$object([
[
'a',
byId('number-1')
],
[
'b',
byId('number-2')
],
[
'c',
byId('sum')
]
]);
var update = function () {
if (arguments.length !== 0) {
throw new LANG$$js_Error('expected 0 argument(s), got ' + arguments.length);
}
return function () {
var a = toNumber(LANG$$js_get('value', LANG$$js_get('a', elements)));
var b = toNumber(LANG$$js_get('value', LANG$$js_get('b', elements)));
return showSum(a, b);
}();
};
var updateHandler = function (_) {
if (arguments.length !== 1) {
throw new LANG$$js_Error('expected 1 argument(s), got ' + arguments.length);
}
return update();
};
var showSum = function (a, b) {
if (arguments.length !== 2) {
throw new LANG$$js_Error('expected 2 argument(s), got ' + arguments.length);
}
return js_set('textContent', $plus(a, b), LANG$$js_get('c', elements));
};
var main = function () {
if (arguments.length !== 0) {
throw new LANG$$js_Error('expected 0 argument(s), got ' + arguments.length);
}
return $semicolon($semicolon(listen(LANG$$js_get('a', elements), 'input', updateHandler), listen(LANG$$js_get('b', elements), 'input', updateHandler)), update());
};
return LANG$$object([[
'main',
main
]]);
}();
let (
byId = global.document::getElementById,
toNumber = ~( x |
let (y = global.Number(x))
in if y = NaN
then 0
else y
),
toNumber = global.Number,
listen = ~( element, name, func |
element.addEventListener(name, func, false);
undefined
),
elements = {
"a": byId("number-1"),
"b": byId("number-2"),
"c": byId("sum")
},
update = ~(|
let (
a = toNumber(elements.a.value),
b = toNumber(elements.b.value)
) in showSum(a, b)
),
updateHandler = ~( _ | update() ),
showSum = ~( a, b |
js_set("textContent", a + b, elements.c)
),
main = ~(|
listen(elements.a, "input", updateHandler);
listen(elements.b, "input", updateHandler);
update()
)
) in {"main": main}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment