elm/libraries/Native/Prelude.js

124 lines
2.8 KiB
JavaScript
Raw Normal View History

Elm.Native.Prelude = function(elm) {
2013-03-16 09:02:16 +00:00
'use strict';
if (elm.Native.Prelude) return elm.Native.Prelude;
2013-03-16 09:02:16 +00:00
var JS = Elm.JavaScript(elm);
var Maybe = Elm.Maybe(elm);
var Utils = Elm.Native.Utils(elm);
var Char = Elm.Char(elm);
2013-03-16 09:02:16 +00:00
function div(a,b) { return (a/b)|0; }
function rem(a,b) { return a % b; }
var mod = Utils.mod;
function abs(x) { return x < 0 ? -x : x; }
function logBase(base,n) { return Math.log(n) / Math.log(base); }
function min(a,b) { return a < b ? a : b; }
function max(a,b) { return a > b ? a : b; }
function clamp(lo,hi,n) { return n < lo ? lo : n > hi ? hi : n; }
function xor(a,b) { return a !== b; }
function not(b) { return !b; }
function truncate(n) { return n|0; }
function id(n) { return n; }
function flip(f,a,b) { return A2(f,b,a); }
function curry(f,a,b) { return f(Utils.Tuple2(a,b)); }
function uncurry(f,v) { return A2(f,v._0,v._1); }
function fst(t) { return t._0; }
function snd(t) { return t._1; }
2013-03-16 09:02:16 +00:00
function readInt(str) {
var s = JS.fromString(str);
var len = s.length;
if (len === 0) { return Maybe.Nothing; }
2013-03-16 09:02:16 +00:00
var start = 0;
if (s[0] == '-') {
if (len === 1) { return Maybe.Nothing; }
start = 1;
2013-03-16 09:02:16 +00:00
}
for (var i = start; i < len; ++i) {
if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
2013-03-16 09:02:16 +00:00
}
return Maybe.Just(parseInt(s, 10));
2013-03-16 09:02:16 +00:00
}
2013-03-16 09:02:16 +00:00
function readFloat(str) {
var s = JS.fromString(str);
var len = s.length;
if (len === 0) { return Maybe.Nothing; }
var start = 0;
if (s[0] == '-') {
if (len === 1) { return Maybe.Nothing; }
start = 1;
2013-03-16 09:02:16 +00:00
}
var dotCount = 0;
for (var i = start; i < len; ++i) {
if (Char.isDigit(s[i])) { continue; }
if (s[i] === '.') {
dotCount += 1;
if (dotCount <= 1) { continue; }
}
return Maybe.Nothing;
2013-03-16 09:02:16 +00:00
}
return Maybe.Just(parseFloat(s));
}
var prelude = {
2013-03-16 09:02:16 +00:00
div:F2(div),
rem:F2(rem),
mod:F2(mod),
pi:Math.PI,
2013-03-16 09:02:16 +00:00
e:Math.e,
cos:Math.cos,
sin:Math.sin,
tan:Math.tan,
acos:Math.acos,
asin:Math.asin,
atan:Math.atan,
atan2:F2(Math.atan2),
sqrt:Math.sqrt,
abs:abs,
logBase:F2(logBase),
min:F2(min),
max:F2(max),
clamp:F3(clamp),
compare:Utils.compare,
2013-03-16 09:02:16 +00:00
xor:F2(xor),
not:not,
otherwise:true,
truncate:truncate,
ceiling:Math.ceil,
floor:Math.floor,
round:Math.round,
toFloat:id,
readInt:readInt,
readFloat:readFloat,
id:id,
flip:F3(flip),
curry:F3(curry),
uncurry:F2(uncurry),
2013-03-16 09:02:16 +00:00
fst:fst,
snd:snd
};
function add(Module) {
var M = Module(elm);
for (var k in M) { prelude[k] = M[k]; }
}
add(Elm.Native.Show);
add(Elm.Signal);
add(Elm.List);
add(Elm.Maybe);
add(Elm.Time);
add(Elm.Graphics.Element);
return elm.Native.Prelude = prelude;
};