on d178521 help sign in
elk/core-js/Data.js
150 lines 4.2 kB history raw
2var Data = function() {
4var Char = function() {
5 function isBetween(lo,hi) { return function(chr) {
6 var c = chr.charCodeAt(0);
7 return lo <= c && c <= hi;
8 };
9 }
10 var isDigit = isBetween('0'.charCodeAt(0),'9'.charCodeAt(0));
11 var chk1 = isBetween('a'.charCodeAt(0),'f'.charCodeAt(0));
12 var chk2 = isBetween('A'.charCodeAt(0),'F'.charCodeAt(0));
14 return {fromCode : function(c) { return String.fromCharCode(c); },
15 toCode : function(c) { return c.charCodeAt(0); },
16 toUpper : function(c) { return c.toUpperCase(); },
17 toLower : function(c) { return c.toLowerCase(); },
18 toLocaleUpper : function(c) { return c.toLocaleUpperCase(); },
19 toLocaleLower : function(c) { return c.toLocaleLowerCase(); },
20 isLower : isBetween('a'.charCodeAt(0),'z'.charCodeAt(0)),
21 isUpper : isBetween('A'.charCodeAt(0),'Z'.charCodeAt(0)),
22 isDigit : isDigit,
23 isOctDigit : isBetween('0'.charCodeAt(0),'7'.charCodeAt(0)),
24 isHexDigit : function(c) { return isDigit(c) || chk1(c) || chk2(c); }
25 };
26}();
28var Maybe = function() {
29 function consMaybe(x) { return function(xs) {
30 if (x[0] === "Just") return ["Cons", x[1], xs];
31 return xs;
32 };
33 }
34 function fromMaybe(b) { return function(m) {
35 if (m[0] === "Just") return m[1];
36 return b;
37 };
38 }
39 function mapCons(f) { return function(y) { return function(xs) {
40 var x = f(y);
41 if (x[0] === "Just") return ["Cons", x[1], xs];
42 return xs;
43 };
44 };
45 }
46 function maybe(b) { return function(f) { return function(m) {
47 if (m[0] === "Just") return f(m[1]);
48 return b;
49 };
50 };
51 }
53 return {Just : function(x) { return ["Just",x]; },
54 Nothing : ["Nothing"],
55 catMaybes : List.foldr(consMaybe)(["Nil"]),
56 isJust : function(m) { return m[0] === "Just"; },
57 isNothing : function(m) { return m[0] === "Nothing"; },
58 fromMaybe : fromMaybe,
59 consMaybe : consMaybe,
60 mapMaybe : function(f) { return List.foldr(mapCons(f))(["Nil"]); },
61 maybe : maybe
62 };
63}();
65/*
66var String = function() {
68 function append(s1) { return function(s2) {
69 return s1.concat(s2);
70 };
71 }
72 function map(f) { return function(s) {
73 for (var i = s.length; i--; ) { s[i] = f(s[i]); }
74 };
75 }
77 function intercalate(sep) { return function(ss) {
78 return Value.listToArray(ss).join(sep);
79 };
80 }
81 function intersperse(sep) { return function(s) {
82 return s.split("").join(sep);
83 };
84 }
86 function foldl(f) { return function(b) { return function(s) {
87 var acc = b;
88 for (var i = 0, len = s.length; i < len; ++i) { acc = f(s[i])(acc); }
89 return acc;
90 };
91 };
92 }
93 function foldr(f) { return function(b) { return function(s) {
94 var acc = b;
95 for (var i = s.length; i--; ) { acc = f(s[i])(acc); }
96 return acc;
97 };
98 };
99 }
101 function concatMap(f) { return function(s) {
102 var a = s.split("");
103 for (var i = a.length; i--; ) { a[i] = f(a[i]); }
104 return a.join("");
105 };
106 }
108 function forall(pred) { return function(s) {
109 for (var i = s.length; i--; ) { if (!pred(s[i])) {return false}; }
110 return true;
111 };
112 }
113 function exists(pred) { return function(s) {
114 for (var i = s.length; i--; ) { if (pred(s[i])) {return true}; }
115 return false;
116 };
117 }
119 return {cons : append,
120 snoc : append,
121 head : function(s) { return s[0]; },
122 last : function(s) { return s[s.length-1]; },
123 tail : function(s) { return s.slice(1); },
124 length : function(s) { return s.length; },
125 map : map,
126 intercalate : intercalate,
127 intersperse : intersperse,
128 reverse : function(s) { return s.split("").reverse().join(""); },
129 toLower : function(s) { return s.toLowerCase(); },
130 toUpper : function(s) { return s.toUpperCase(); },
131 foldl : foldl,
132 foldr : foldr,
133 concat : function(ss) { return Value.listToArray(ss).join(""); },
134 concatMap : concatMap,
135 forall : forall,
136 exists : exists,
137 //filter : filter,
138 //take:,
139 //drop:,
140 toText : Value.toText,
141 properEscape : Value.properEscape
142 };
143}();
144*/
145return {String: {toText:Value.toText, properEscape:Value.properEscape},
146 Char:Char,
147 Maybe:Maybe,
148 List:List
149 };
150}();