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