/* Utility functions for working with JSStrings. */
var _jss_singleton = String.fromCharCode;
function _jss_cons(c,s) {return String.fromCharCode(c)+s;}
function _jss_snoc(s,c) {return s+String.fromCharCode(c);}
function _jss_append(a,b) {return a+b;}
function _jss_len(s) {return s.length;}
function _jss_index(s,i) {return s.charCodeAt(i);}
function _jss_drop(s,i) {return s.substr(i);}
function _jss_substr(s,a,b) {return s.substr(a,b);}
function _jss_take(n,s) {return s.substr(0,n);}
// TODO: incorrect for some unusual characters.
function _jss_rev(s) {return s.split("").reverse().join("");}
function _jss_map(f,s) {
f = E(f);
var s2 = '';
for(var i in s) {
s2 += String.fromCharCode(E(f(s.charCodeAt(i))));
}
return s2;
}
function _jss_foldl(f,x,s) {
f = E(f);
for(var i in s) {
x = A(f,[x,s.charCodeAt(i)]);
}
return x;
}
function _jss_re_match(s,re) {return s.search(re)>=0;}
function _jss_re_compile(re,fs) {return new RegExp(re,fs);}
function _jss_re_replace(s,re,rep) {return s.replace(re,rep);}
function _jss_re_find(re,s) {
var a = s.match(re);
return a ? mklst(a) : [0];
}
function mklst(arr) {
var l = [0], len = arr.length-1;
for(var i = 0; i <= len; ++i) {
l = [1,arr[len-i],l];
}
return l;
}