on a3801ac help sign in
elk/libraries/Native/Prelude.js
123 lines 2.9 kB history raw
2Elm.Native.Prelude = function(elm) {
3 'use strict';
4 if (elm.Native.Prelude) return elm.Native.Prelude;
6 var JS = Elm.JavaScript(elm);
7 var Maybe = Elm.Maybe(elm);
8 var Utils = Elm.Native.Utils(elm);
9 var Char = Elm.Char(elm);
11 function div(a,b) { return (a/b)|0; }
12 function rem(a,b) { return a % b; }
13 var mod = Utils.mod;
14 function abs(x) { return x < 0 ? -x : x; }
15 function logBase(base,n) { return Math.log(n) / Math.log(base); }
16 function min(a,b) { return a < b ? a : b; }
17 function max(a,b) { return a > b ? a : b; }
18 function clamp(lo,hi,n) { return n < lo ? lo : n > hi ? hi : n; }
19 function xor(a,b) { return a !== b; }
20 function not(b) { return !b; }
22 function truncate(n) { return n|0; }
24 function id(n) { return n; }
25 function flip(f,a,b) { return A2(f,b,a); }
26 function curry(f,a,b) { return f(Utils.Tuple2(a,b)); }
27 function uncurry(f,v) { return A2(f,v._0,v._1); }
28 function fst(t) { return t._0; }
29 function snd(t) { return t._1; }
31 function readInt(str) {
32 var s = JS.fromString(str);
33 var len = s.length;
34 if (len === 0) { return Maybe.Nothing; }
35 var start = 0;
36 if (s[0] == '-') {
37 if (len === 1) { return Maybe.Nothing; }
38 start = 1;
39 }
40 for (var i = start; i < len; ++i) {
41 if (!Char.isDigit(s[i])) { return Maybe.Nothing; }
42 }
43 return Maybe.Just(parseInt(s, 10));
44 }
46 function readFloat(str) {
47 var s = JS.fromString(str);
48 var len = s.length;
49 if (len === 0) { return Maybe.Nothing; }
50 var start = 0;
51 if (s[0] == '-') {
52 if (len === 1) { return Maybe.Nothing; }
53 start = 1;
54 }
55 var dotCount = 0;
56 for (var i = start; i < len; ++i) {
57 if (Char.isDigit(s[i])) { continue; }
58 if (s[i] === '.') {
59 dotCount += 1;
60 if (dotCount <= 1) { continue; }
61 }
62 return Maybe.Nothing;
63 }
64 return Maybe.Just(parseFloat(s));
65 }
67 var prelude = {
68 div:F2(div),
69 rem:F2(rem),
70 mod:mod,
72 pi:Math.PI,
73 e:Math.e,
74 cos:Math.cos,
75 sin:Math.sin,
76 tan:Math.tan,
77 acos:Math.acos,
78 asin:Math.asin,
79 atan:Math.atan,
80 atan2:F2(Math.atan2),
82 sqrt:Math.sqrt,
83 abs:abs,
84 logBase:F2(logBase),
85 min:F2(min),
86 max:F2(max),
87 clamp:F3(clamp),
88 compare:Utils.compare,
90 xor:F2(xor),
91 not:not,
92 otherwise:true,
94 truncate:truncate,
95 ceiling:Math.ceil,
96 floor:Math.floor,
97 round:Math.round,
98 toFloat:id,
100 readInt:readInt,
101 readFloat:readFloat,
103 id:id,
104 flip:F3(flip),
105 curry:F3(curry),
106 uncurry:F2(uncurry),
107 fst:fst,
108 snd:snd
109 };
111 function add(Module) {
112 var M = Module(elm);
113 for (var k in M) { prelude[k] = M[k]; }
114 }
115 add(Elm.Native.Show);
116 add(Elm.Signal);
117 add(Elm.List);
118 add(Elm.Maybe);
119 add(Elm.Time);
120 add(Elm.Graphics.Element);
122 return elm.Native.Prelude = prelude;
123};