bucklescript-tea
Version:
TEA for Bucklescript
1,498 lines (1,478 loc) • 42.7 kB
JavaScript
// Generated by BUCKLESCRIPT, PLEASE EDIT WITH CARE
'use strict';
var List = require("bs-platform/lib/js/list.js");
var Block = require("bs-platform/lib/js/block.js");
var Curry = require("bs-platform/lib/js/curry.js");
var Tea_json = require("./tea_json.js");
var Caml_option = require("bs-platform/lib/js/caml_option.js");
var Caml_primitive = require("bs-platform/lib/js/caml_primitive.js");
var Web_xmlhttprequest = require("./web_xmlhttprequest.js");
var Caml_builtin_exceptions = require("bs-platform/lib/js/caml_builtin_exceptions.js");
function string_of_error(param) {
if (typeof param === "number") {
switch (param) {
case /* Timeout */0 :
return "Timeout";
case /* NetworkError */1 :
return "Unknown network error";
case /* Aborted */2 :
return "Request aborted";
}
} else {
switch (param.tag | 0) {
case /* BadUrl */0 :
return "Bad Url: " + param[0];
case /* BadStatus */1 :
return "Bad Status: " + param[0].url;
case /* BadPayload */2 :
return "Bad Payload: " + param[1].url;
}
}
}
var emptyRequestEvents = {
onreadystatechange: undefined,
onprogress: undefined
};
function expectStringResponse(func) {
return /* Expect */[
/* TextResponseType */5,
(function (param) {
var body = param.body;
if (typeof body === "number" || body.tag !== /* TextResponse */5) {
return /* Error */Block.__(1, ["Non-text response returned"]);
} else {
return Curry._1(func, body[0]);
}
})
];
}
var expectString = expectStringResponse((function (resString) {
return /* Ok */Block.__(0, [resString]);
}));
function request(rawRequest) {
return /* Request */[
rawRequest,
undefined
];
}
function getString(url) {
return /* Request */[
{
"method'": "GET",
headers: /* [] */0,
url: url,
body: /* EmptyBody */0,
expect: expectString,
timeout: undefined,
withCredentials: false
},
undefined
];
}
function toTask(param) {
var request = param[0];
var height = function (param) {
if (param) {
return param[/* h */4];
} else {
return 0;
}
};
var create = function (l, x, d, r) {
var hl = height(l);
var hr = height(r);
return /* Node */[
/* l */l,
/* v */x,
/* d */d,
/* r */r,
/* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
];
};
var singleton = function (x, d) {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */d,
/* r : Empty */0,
/* h */1
];
};
var bal = function (l, x, d, r) {
var hl = l ? l[/* h */4] : 0;
var hr = r ? r[/* h */4] : 0;
if (hl > (hr + 2 | 0)) {
if (l) {
var lr = l[/* r */3];
var ld = l[/* d */2];
var lv = l[/* v */1];
var ll = l[/* l */0];
if (height(ll) >= height(lr)) {
return create(ll, lv, ld, create(lr, x, d, r));
} else if (lr) {
return create(create(ll, lv, ld, lr[/* l */0]), lr[/* v */1], lr[/* d */2], create(lr[/* r */3], x, d, r));
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else if (hr > (hl + 2 | 0)) {
if (r) {
var rr = r[/* r */3];
var rd = r[/* d */2];
var rv = r[/* v */1];
var rl = r[/* l */0];
if (height(rr) >= height(rl)) {
return create(create(l, x, d, rl), rv, rd, rr);
} else if (rl) {
return create(create(l, x, d, rl[/* l */0]), rl[/* v */1], rl[/* d */2], create(rl[/* r */3], rv, rd, rr));
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */d,
/* r */r,
/* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
];
}
};
var add = function (x, data, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
if (d === data) {
return m;
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */data,
/* r */r,
/* h */m[/* h */4]
];
}
} else if (c < 0) {
var ll = add(x, data, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = add(x, data, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */data,
/* r : Empty */0,
/* h */1
];
}
};
var min_binding = function (_param) {
while(true) {
var param = _param;
if (param) {
var l = param[/* l */0];
if (l) {
_param = l;
continue ;
} else {
return /* tuple */[
param[/* v */1],
param[/* d */2]
];
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
};
var remove_min_binding = function (param) {
if (param) {
var l = param[/* l */0];
if (l) {
return bal(remove_min_binding(l), param[/* v */1], param[/* d */2], param[/* r */3]);
} else {
return param[/* r */3];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.remove_min_elt"
];
}
};
var merge = function (t1, t2) {
if (t1) {
if (t2) {
var match = min_binding(t2);
return bal(t1, match[0], match[1], remove_min_binding(t2));
} else {
return t1;
}
} else {
return t2;
}
};
var remove = function (x, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
return merge(l, r);
} else if (c < 0) {
var ll = remove(x, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = remove(x, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
return /* Empty */0;
}
};
var update = function (x, f, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
var match = Curry._1(f, Caml_option.some(d));
if (match !== undefined) {
var data = Caml_option.valFromOption(match);
if (d === data) {
return m;
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */data,
/* r */r,
/* h */m[/* h */4]
];
}
} else {
return merge(l, r);
}
} else if (c < 0) {
var ll = update(x, f, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = update(x, f, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
var match$1 = Curry._1(f, undefined);
if (match$1 !== undefined) {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */Caml_option.valFromOption(match$1),
/* r : Empty */0,
/* h */1
];
} else {
return /* Empty */0;
}
}
};
var iter = function (f, _param) {
while(true) {
var param = _param;
if (param) {
iter(f, param[/* l */0]);
Curry._2(f, param[/* v */1], param[/* d */2]);
_param = param[/* r */3];
continue ;
} else {
return /* () */0;
}
};
};
var map = function (f, param) {
if (param) {
var l$prime = map(f, param[/* l */0]);
var d$prime = Curry._1(f, param[/* d */2]);
var r$prime = map(f, param[/* r */3]);
return /* Node */[
/* l */l$prime,
/* v */param[/* v */1],
/* d */d$prime,
/* r */r$prime,
/* h */param[/* h */4]
];
} else {
return /* Empty */0;
}
};
var mapi = function (f, param) {
if (param) {
var v = param[/* v */1];
var l$prime = mapi(f, param[/* l */0]);
var d$prime = Curry._2(f, v, param[/* d */2]);
var r$prime = mapi(f, param[/* r */3]);
return /* Node */[
/* l */l$prime,
/* v */v,
/* d */d$prime,
/* r */r$prime,
/* h */param[/* h */4]
];
} else {
return /* Empty */0;
}
};
var fold = function (f, _m, _accu) {
while(true) {
var accu = _accu;
var m = _m;
if (m) {
_accu = Curry._3(f, m[/* v */1], m[/* d */2], fold(f, m[/* l */0], accu));
_m = m[/* r */3];
continue ;
} else {
return accu;
}
};
};
var for_all = function (p, _param) {
while(true) {
var param = _param;
if (param) {
if (Curry._2(p, param[/* v */1], param[/* d */2]) && for_all(p, param[/* l */0])) {
_param = param[/* r */3];
continue ;
} else {
return false;
}
} else {
return true;
}
};
};
var exists = function (p, _param) {
while(true) {
var param = _param;
if (param) {
if (Curry._2(p, param[/* v */1], param[/* d */2]) || exists(p, param[/* l */0])) {
return true;
} else {
_param = param[/* r */3];
continue ;
}
} else {
return false;
}
};
};
var add_min_binding = function (k, x, param) {
if (param) {
return bal(add_min_binding(k, x, param[/* l */0]), param[/* v */1], param[/* d */2], param[/* r */3]);
} else {
return singleton(k, x);
}
};
var add_max_binding = function (k, x, param) {
if (param) {
return bal(param[/* l */0], param[/* v */1], param[/* d */2], add_max_binding(k, x, param[/* r */3]));
} else {
return singleton(k, x);
}
};
var join = function (l, v, d, r) {
if (l) {
if (r) {
var rh = r[/* h */4];
var lh = l[/* h */4];
if (lh > (rh + 2 | 0)) {
return bal(l[/* l */0], l[/* v */1], l[/* d */2], join(l[/* r */3], v, d, r));
} else if (rh > (lh + 2 | 0)) {
return bal(join(l, v, d, r[/* l */0]), r[/* v */1], r[/* d */2], r[/* r */3]);
} else {
return create(l, v, d, r);
}
} else {
return add_max_binding(v, d, l);
}
} else {
return add_min_binding(v, d, r);
}
};
var concat = function (t1, t2) {
if (t1) {
if (t2) {
var match = min_binding(t2);
return join(t1, match[0], match[1], remove_min_binding(t2));
} else {
return t1;
}
} else {
return t2;
}
};
var concat_or_join = function (t1, v, d, t2) {
if (d !== undefined) {
return join(t1, v, Caml_option.valFromOption(d), t2);
} else {
return concat(t1, t2);
}
};
var split = function (x, param) {
if (param) {
var r = param[/* r */3];
var d = param[/* d */2];
var v = param[/* v */1];
var l = param[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
return /* tuple */[
l,
Caml_option.some(d),
r
];
} else if (c < 0) {
var match = split(x, l);
return /* tuple */[
match[0],
match[1],
join(match[2], v, d, r)
];
} else {
var match$1 = split(x, r);
return /* tuple */[
join(l, v, d, match$1[0]),
match$1[1],
match$1[2]
];
}
} else {
return /* tuple */[
/* Empty */0,
undefined,
/* Empty */0
];
}
};
var merge$1 = function (f, s1, s2) {
if (s1) {
var v1 = s1[/* v */1];
if (s1[/* h */4] >= height(s2)) {
var match = split(v1, s2);
return concat_or_join(merge$1(f, s1[/* l */0], match[0]), v1, Curry._3(f, v1, Caml_option.some(s1[/* d */2]), match[1]), merge$1(f, s1[/* r */3], match[2]));
}
} else if (!s2) {
return /* Empty */0;
}
if (s2) {
var v2 = s2[/* v */1];
var match$1 = split(v2, s1);
return concat_or_join(merge$1(f, match$1[0], s2[/* l */0]), v2, Curry._3(f, v2, match$1[1], Caml_option.some(s2[/* d */2])), merge$1(f, match$1[2], s2[/* r */3]));
} else {
throw [
Caml_builtin_exceptions.assert_failure,
/* tuple */[
"map.ml",
393,
10
]
];
}
};
var union = function (f, s1, s2) {
if (s1) {
if (s2) {
var d2 = s2[/* d */2];
var v2 = s2[/* v */1];
var d1 = s1[/* d */2];
var v1 = s1[/* v */1];
if (s1[/* h */4] >= s2[/* h */4]) {
var match = split(v1, s2);
var d2$1 = match[1];
var l = union(f, s1[/* l */0], match[0]);
var r = union(f, s1[/* r */3], match[2]);
if (d2$1 !== undefined) {
return concat_or_join(l, v1, Curry._3(f, v1, d1, Caml_option.valFromOption(d2$1)), r);
} else {
return join(l, v1, d1, r);
}
} else {
var match$1 = split(v2, s1);
var d1$1 = match$1[1];
var l$1 = union(f, match$1[0], s2[/* l */0]);
var r$1 = union(f, match$1[2], s2[/* r */3]);
if (d1$1 !== undefined) {
return concat_or_join(l$1, v2, Curry._3(f, v2, Caml_option.valFromOption(d1$1), d2), r$1);
} else {
return join(l$1, v2, d2, r$1);
}
}
} else {
return s1;
}
} else {
return s2;
}
};
var filter = function (p, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var l$prime = filter(p, l);
var pvd = Curry._2(p, v, d);
var r$prime = filter(p, r);
if (pvd) {
if (l === l$prime && r === r$prime) {
return m;
} else {
return join(l$prime, v, d, r$prime);
}
} else {
return concat(l$prime, r$prime);
}
} else {
return /* Empty */0;
}
};
var partition = function (p, param) {
if (param) {
var d = param[/* d */2];
var v = param[/* v */1];
var match = partition(p, param[/* l */0]);
var lf = match[1];
var lt = match[0];
var pvd = Curry._2(p, v, d);
var match$1 = partition(p, param[/* r */3]);
var rf = match$1[1];
var rt = match$1[0];
if (pvd) {
return /* tuple */[
join(lt, v, d, rt),
concat(lf, rf)
];
} else {
return /* tuple */[
concat(lt, rt),
join(lf, v, d, rf)
];
}
} else {
return /* tuple */[
/* Empty */0,
/* Empty */0
];
}
};
var cardinal = function (param) {
if (param) {
return (cardinal(param[/* l */0]) + 1 | 0) + cardinal(param[/* r */3]) | 0;
} else {
return 0;
}
};
var bindings_aux = function (_accu, _param) {
while(true) {
var param = _param;
var accu = _accu;
if (param) {
_param = param[/* l */0];
_accu = /* :: */[
/* tuple */[
param[/* v */1],
param[/* d */2]
],
bindings_aux(accu, param[/* r */3])
];
continue ;
} else {
return accu;
}
};
};
var expect = request.expect;
var responseToResult = expect[1];
var typ = expect[0];
var withCredentials = request.withCredentials;
var timeout = request.timeout;
var body = request.body;
var url = request.url;
var headers = request.headers;
var method$prime = request["method'"];
return /* Task */[(function (cb) {
var enqResError = function (result) {
var partial_arg = /* Error */Block.__(1, [result]);
return (function (param) {
return Curry._1(cb, partial_arg);
});
};
var enqResOk = function (result) {
var partial_arg = /* Ok */Block.__(0, [result]);
return (function (param) {
return Curry._1(cb, partial_arg);
});
};
var xhr = new XMLHttpRequest();
var partial_arg = /* Error */Block.__(1, [/* NetworkError */1]);
var cb$1 = function (param) {
return Curry._1(cb, partial_arg);
};
xhr.onerror = cb$1;
var partial_arg$1 = /* Error */Block.__(1, [/* Timeout */0]);
var cb$2 = function (param) {
return Curry._1(cb, partial_arg$1);
};
xhr.ontimeout = cb$2;
var partial_arg$2 = /* Error */Block.__(1, [/* Aborted */2]);
var cb$3 = function (param) {
return Curry._1(cb, partial_arg$2);
};
xhr.onabort = cb$3;
var cb$4 = function (_ev) {
var match = Web_xmlhttprequest.getAllResponseHeadersAsDict(xhr);
var headers;
headers = match.tag ? /* Empty */0 : match[0];
var response_url = xhr.responseURL;
var response_status = {
code: xhr.status,
message: xhr.statusText
};
var response_body = Web_xmlhttprequest.get_response(xhr);
var response = {
url: response_url,
status: response_status,
headers: headers,
body: response_body
};
if (response_status.code < 200 || 300 <= response_status.code) {
return enqResError(/* BadStatus */Block.__(1, [response]))(/* () */0);
} else {
var match$1 = Curry._1(responseToResult, response);
if (match$1.tag) {
return enqResError(/* BadPayload */Block.__(2, [
match$1[0],
response
]))(/* () */0);
} else {
return enqResOk(match$1[0])(/* () */0);
}
}
};
xhr.onload = cb$4;
try {
Web_xmlhttprequest.open_(method$prime, url, undefined, undefined, undefined, xhr);
}
catch (exn){
enqResError(/* BadUrl */Block.__(0, [url]))(/* () */0);
}
var setHeader = function (param) {
return Web_xmlhttprequest.setRequestHeader(param[0], param[1], xhr);
};
List.iter(setHeader, headers);
Web_xmlhttprequest.set_responseType(typ, xhr);
if (timeout !== undefined) {
xhr.timeout = timeout;
}
xhr.withCredentials = withCredentials;
Web_xmlhttprequest.send(body, xhr);
return /* () */0;
})];
}
function send(resultToMessage, param) {
var maybeEvents = param[1];
var request = param[0];
var height = function (param) {
if (param) {
return param[/* h */4];
} else {
return 0;
}
};
var create = function (l, x, d, r) {
var hl = height(l);
var hr = height(r);
return /* Node */[
/* l */l,
/* v */x,
/* d */d,
/* r */r,
/* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
];
};
var singleton = function (x, d) {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */d,
/* r : Empty */0,
/* h */1
];
};
var bal = function (l, x, d, r) {
var hl = l ? l[/* h */4] : 0;
var hr = r ? r[/* h */4] : 0;
if (hl > (hr + 2 | 0)) {
if (l) {
var lr = l[/* r */3];
var ld = l[/* d */2];
var lv = l[/* v */1];
var ll = l[/* l */0];
if (height(ll) >= height(lr)) {
return create(ll, lv, ld, create(lr, x, d, r));
} else if (lr) {
return create(create(ll, lv, ld, lr[/* l */0]), lr[/* v */1], lr[/* d */2], create(lr[/* r */3], x, d, r));
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else if (hr > (hl + 2 | 0)) {
if (r) {
var rr = r[/* r */3];
var rd = r[/* d */2];
var rv = r[/* v */1];
var rl = r[/* l */0];
if (height(rr) >= height(rl)) {
return create(create(l, x, d, rl), rv, rd, rr);
} else if (rl) {
return create(create(l, x, d, rl[/* l */0]), rl[/* v */1], rl[/* d */2], create(rl[/* r */3], rv, rd, rr));
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.bal"
];
}
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */d,
/* r */r,
/* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
];
}
};
var add = function (x, data, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
if (d === data) {
return m;
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */data,
/* r */r,
/* h */m[/* h */4]
];
}
} else if (c < 0) {
var ll = add(x, data, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = add(x, data, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */data,
/* r : Empty */0,
/* h */1
];
}
};
var min_binding = function (_param) {
while(true) {
var param = _param;
if (param) {
var l = param[/* l */0];
if (l) {
_param = l;
continue ;
} else {
return /* tuple */[
param[/* v */1],
param[/* d */2]
];
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
};
var remove_min_binding = function (param) {
if (param) {
var l = param[/* l */0];
if (l) {
return bal(remove_min_binding(l), param[/* v */1], param[/* d */2], param[/* r */3]);
} else {
return param[/* r */3];
}
} else {
throw [
Caml_builtin_exceptions.invalid_argument,
"Map.remove_min_elt"
];
}
};
var merge = function (t1, t2) {
if (t1) {
if (t2) {
var match = min_binding(t2);
return bal(t1, match[0], match[1], remove_min_binding(t2));
} else {
return t1;
}
} else {
return t2;
}
};
var remove = function (x, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
return merge(l, r);
} else if (c < 0) {
var ll = remove(x, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = remove(x, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
return /* Empty */0;
}
};
var update = function (x, f, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
var match = Curry._1(f, Caml_option.some(d));
if (match !== undefined) {
var data = Caml_option.valFromOption(match);
if (d === data) {
return m;
} else {
return /* Node */[
/* l */l,
/* v */x,
/* d */data,
/* r */r,
/* h */m[/* h */4]
];
}
} else {
return merge(l, r);
}
} else if (c < 0) {
var ll = update(x, f, l);
if (l === ll) {
return m;
} else {
return bal(ll, v, d, r);
}
} else {
var rr = update(x, f, r);
if (r === rr) {
return m;
} else {
return bal(l, v, d, rr);
}
}
} else {
var match$1 = Curry._1(f, undefined);
if (match$1 !== undefined) {
return /* Node */[
/* l : Empty */0,
/* v */x,
/* d */Caml_option.valFromOption(match$1),
/* r : Empty */0,
/* h */1
];
} else {
return /* Empty */0;
}
}
};
var iter = function (f, _param) {
while(true) {
var param = _param;
if (param) {
iter(f, param[/* l */0]);
Curry._2(f, param[/* v */1], param[/* d */2]);
_param = param[/* r */3];
continue ;
} else {
return /* () */0;
}
};
};
var map = function (f, param) {
if (param) {
var l$prime = map(f, param[/* l */0]);
var d$prime = Curry._1(f, param[/* d */2]);
var r$prime = map(f, param[/* r */3]);
return /* Node */[
/* l */l$prime,
/* v */param[/* v */1],
/* d */d$prime,
/* r */r$prime,
/* h */param[/* h */4]
];
} else {
return /* Empty */0;
}
};
var mapi = function (f, param) {
if (param) {
var v = param[/* v */1];
var l$prime = mapi(f, param[/* l */0]);
var d$prime = Curry._2(f, v, param[/* d */2]);
var r$prime = mapi(f, param[/* r */3]);
return /* Node */[
/* l */l$prime,
/* v */v,
/* d */d$prime,
/* r */r$prime,
/* h */param[/* h */4]
];
} else {
return /* Empty */0;
}
};
var fold = function (f, _m, _accu) {
while(true) {
var accu = _accu;
var m = _m;
if (m) {
_accu = Curry._3(f, m[/* v */1], m[/* d */2], fold(f, m[/* l */0], accu));
_m = m[/* r */3];
continue ;
} else {
return accu;
}
};
};
var for_all = function (p, _param) {
while(true) {
var param = _param;
if (param) {
if (Curry._2(p, param[/* v */1], param[/* d */2]) && for_all(p, param[/* l */0])) {
_param = param[/* r */3];
continue ;
} else {
return false;
}
} else {
return true;
}
};
};
var exists = function (p, _param) {
while(true) {
var param = _param;
if (param) {
if (Curry._2(p, param[/* v */1], param[/* d */2]) || exists(p, param[/* l */0])) {
return true;
} else {
_param = param[/* r */3];
continue ;
}
} else {
return false;
}
};
};
var add_min_binding = function (k, x, param) {
if (param) {
return bal(add_min_binding(k, x, param[/* l */0]), param[/* v */1], param[/* d */2], param[/* r */3]);
} else {
return singleton(k, x);
}
};
var add_max_binding = function (k, x, param) {
if (param) {
return bal(param[/* l */0], param[/* v */1], param[/* d */2], add_max_binding(k, x, param[/* r */3]));
} else {
return singleton(k, x);
}
};
var join = function (l, v, d, r) {
if (l) {
if (r) {
var rh = r[/* h */4];
var lh = l[/* h */4];
if (lh > (rh + 2 | 0)) {
return bal(l[/* l */0], l[/* v */1], l[/* d */2], join(l[/* r */3], v, d, r));
} else if (rh > (lh + 2 | 0)) {
return bal(join(l, v, d, r[/* l */0]), r[/* v */1], r[/* d */2], r[/* r */3]);
} else {
return create(l, v, d, r);
}
} else {
return add_max_binding(v, d, l);
}
} else {
return add_min_binding(v, d, r);
}
};
var concat = function (t1, t2) {
if (t1) {
if (t2) {
var match = min_binding(t2);
return join(t1, match[0], match[1], remove_min_binding(t2));
} else {
return t1;
}
} else {
return t2;
}
};
var concat_or_join = function (t1, v, d, t2) {
if (d !== undefined) {
return join(t1, v, Caml_option.valFromOption(d), t2);
} else {
return concat(t1, t2);
}
};
var split = function (x, param) {
if (param) {
var r = param[/* r */3];
var d = param[/* d */2];
var v = param[/* v */1];
var l = param[/* l */0];
var c = Caml_primitive.caml_string_compare(x, v);
if (c === 0) {
return /* tuple */[
l,
Caml_option.some(d),
r
];
} else if (c < 0) {
var match = split(x, l);
return /* tuple */[
match[0],
match[1],
join(match[2], v, d, r)
];
} else {
var match$1 = split(x, r);
return /* tuple */[
join(l, v, d, match$1[0]),
match$1[1],
match$1[2]
];
}
} else {
return /* tuple */[
/* Empty */0,
undefined,
/* Empty */0
];
}
};
var merge$1 = function (f, s1, s2) {
if (s1) {
var v1 = s1[/* v */1];
if (s1[/* h */4] >= height(s2)) {
var match = split(v1, s2);
return concat_or_join(merge$1(f, s1[/* l */0], match[0]), v1, Curry._3(f, v1, Caml_option.some(s1[/* d */2]), match[1]), merge$1(f, s1[/* r */3], match[2]));
}
} else if (!s2) {
return /* Empty */0;
}
if (s2) {
var v2 = s2[/* v */1];
var match$1 = split(v2, s1);
return concat_or_join(merge$1(f, match$1[0], s2[/* l */0]), v2, Curry._3(f, v2, match$1[1], Caml_option.some(s2[/* d */2])), merge$1(f, match$1[2], s2[/* r */3]));
} else {
throw [
Caml_builtin_exceptions.assert_failure,
/* tuple */[
"map.ml",
393,
10
]
];
}
};
var union = function (f, s1, s2) {
if (s1) {
if (s2) {
var d2 = s2[/* d */2];
var v2 = s2[/* v */1];
var d1 = s1[/* d */2];
var v1 = s1[/* v */1];
if (s1[/* h */4] >= s2[/* h */4]) {
var match = split(v1, s2);
var d2$1 = match[1];
var l = union(f, s1[/* l */0], match[0]);
var r = union(f, s1[/* r */3], match[2]);
if (d2$1 !== undefined) {
return concat_or_join(l, v1, Curry._3(f, v1, d1, Caml_option.valFromOption(d2$1)), r);
} else {
return join(l, v1, d1, r);
}
} else {
var match$1 = split(v2, s1);
var d1$1 = match$1[1];
var l$1 = union(f, match$1[0], s2[/* l */0]);
var r$1 = union(f, match$1[2], s2[/* r */3]);
if (d1$1 !== undefined) {
return concat_or_join(l$1, v2, Curry._3(f, v2, Caml_option.valFromOption(d1$1), d2), r$1);
} else {
return join(l$1, v2, d2, r$1);
}
}
} else {
return s1;
}
} else {
return s2;
}
};
var filter = function (p, m) {
if (m) {
var r = m[/* r */3];
var d = m[/* d */2];
var v = m[/* v */1];
var l = m[/* l */0];
var l$prime = filter(p, l);
var pvd = Curry._2(p, v, d);
var r$prime = filter(p, r);
if (pvd) {
if (l === l$prime && r === r$prime) {
return m;
} else {
return join(l$prime, v, d, r$prime);
}
} else {
return concat(l$prime, r$prime);
}
} else {
return /* Empty */0;
}
};
var partition = function (p, param) {
if (param) {
var d = param[/* d */2];
var v = param[/* v */1];
var match = partition(p, param[/* l */0]);
var lf = match[1];
var lt = match[0];
var pvd = Curry._2(p, v, d);
var match$1 = partition(p, param[/* r */3]);
var rf = match$1[1];
var rt = match$1[0];
if (pvd) {
return /* tuple */[
join(lt, v, d, rt),
concat(lf, rf)
];
} else {
return /* tuple */[
concat(lt, rt),
join(lf, v, d, rf)
];
}
} else {
return /* tuple */[
/* Empty */0,
/* Empty */0
];
}
};
var cardinal = function (param) {
if (param) {
return (cardinal(param[/* l */0]) + 1 | 0) + cardinal(param[/* r */3]) | 0;
} else {
return 0;
}
};
var bindings_aux = function (_accu, _param) {
while(true) {
var param = _param;
var accu = _accu;
if (param) {
_param = param[/* l */0];
_accu = /* :: */[
/* tuple */[
param[/* v */1],
param[/* d */2]
],
bindings_aux(accu, param[/* r */3])
];
continue ;
} else {
return accu;
}
};
};
var expect = request.expect;
var responseToResult = expect[1];
var typ = expect[0];
var withCredentials = request.withCredentials;
var timeout = request.timeout;
var body = request.body;
var url = request.url;
var headers = request.headers;
var method$prime = request["method'"];
return /* EnqueueCall */Block.__(2, [(function (callbacks) {
var enqRes = function (result, _ev) {
return Curry._1(callbacks.contents.enqueue, Curry._1(resultToMessage, result));
};
var enqResError = function (result) {
var partial_arg = /* Error */Block.__(1, [result]);
return (function (param) {
return enqRes(partial_arg, param);
});
};
var enqResOk = function (result) {
var partial_arg = /* Ok */Block.__(0, [result]);
return (function (param) {
return enqRes(partial_arg, param);
});
};
var xhr = new XMLHttpRequest();
if (maybeEvents !== undefined) {
var match = maybeEvents;
var mayCB = function (thenDo, param) {
if (param !== undefined) {
return Curry._1(thenDo, Curry._1(param, callbacks));
} else {
return /* () */0;
}
};
mayCB((function (param) {
xhr.onreadystatechange = param;
return /* () */0;
}), match.onreadystatechange);
mayCB((function (param) {
xhr.onprogress = param;
return /* () */0;
}), match.onprogress);
}
var partial_arg = /* Error */Block.__(1, [/* NetworkError */1]);
var cb = function (param) {
return enqRes(partial_arg, param);
};
xhr.onerror = cb;
var partial_arg$1 = /* Error */Block.__(1, [/* Timeout */0]);
var cb$1 = function (param) {
return enqRes(partial_arg$1, param);
};
xhr.ontimeout = cb$1;
var partial_arg$2 = /* Error */Block.__(1, [/* Aborted */2]);
var cb$2 = function (param) {
return enqRes(partial_arg$2, param);
};
xhr.onabort = cb$2;
var cb$3 = function (_ev) {
var match = Web_xmlhttprequest.getAllResponseHeadersAsDict(xhr);
var headers;
headers = match.tag ? /* Empty */0 : match[0];
var response_url = xhr.responseURL;
var response_status = {
code: xhr.status,
message: xhr.statusText
};
var response_body = Web_xmlhttprequest.get_response(xhr);
var response = {
url: response_url,
status: response_status,
headers: headers,
body: response_body
};
if (response_status.code < 200 || 300 <= response_status.code) {
return enqResError(/* BadStatus */Block.__(1, [response]))(/* () */0);
} else {
var match$1 = Curry._1(responseToResult, response);
if (match$1.tag) {
return enqResError(/* BadPayload */Block.__(2, [
match$1[0],
response
]))(/* () */0);
} else {
return enqResOk(match$1[0])(/* () */0);
}
}
};
xhr.onload = cb$3;
try {
Web_xmlhttprequest.open_(method$prime, url, undefined, undefined, undefined, xhr);
}
catch (exn){
enqResError(/* BadUrl */Block.__(0, [url]))(/* () */0);
}
var setHeader = function (param) {
return Web_xmlhttprequest.setRequestHeader(param[0], param[1], xhr);
};
List.iter(setHeader, headers);
Web_xmlhttprequest.set_responseType(typ, xhr);
if (timeout !== undefined) {
xhr.timeout = timeout;
}
xhr.withCredentials = withCredentials;
Web_xmlhttprequest.send(body, xhr);
return /* () */0;
})]);
}
function encodeUri(str) {
return encodeURIComponent(str);
}
function decodeUri(str) {
try {
return decodeURIComponent(str);
}
catch (exn){
return ;
}
}
function track(toMessage, param) {
var events = param[1];
var onprogress = (function (callbacks, ev) {
var match = Tea_json.Decoder.decodeValue(Tea_json.Decoder.field("lengthComputable", Tea_json.Decoder.bool), ev);
var lengthComputable;
lengthComputable = match.tag ? false : match[0];
if (lengthComputable) {
var decoder = Tea_json.Decoder.map2((function (bytes, bytesExpected) {
return {
bytes: bytes,
bytesExpected: bytesExpected
};
}), Tea_json.Decoder.field("loaded", Tea_json.Decoder.$$int), Tea_json.Decoder.field("total", Tea_json.Decoder.$$int));
var match$1 = Tea_json.Decoder.decodeValue(decoder, ev);
if (match$1.tag) {
return /* () */0;
} else {
return Curry._1(callbacks.contents.enqueue, Curry._1(toMessage, match$1[0]));
}
} else {
return 0;
}
});
var events$1 = events !== undefined ? events : emptyRequestEvents;
return /* Request */[
param[0],
{
onreadystatechange: events$1.onreadystatechange,
onprogress: onprogress
}
];
}
var Progress_emptyProgress = {
bytes: 0,
bytesExpected: 0
};
var Progress = {
emptyProgress: Progress_emptyProgress,
track: track
};
exports.string_of_error = string_of_error;
exports.emptyRequestEvents = emptyRequestEvents;
exports.expectStringResponse = expectStringResponse;
exports.expectString = expectString;
exports.request = request;
exports.getString = getString;
exports.toTask = toTask;
exports.send = send;
exports.encodeUri = encodeUri;
exports.decodeUri = decodeUri;
exports.Progress = Progress;
/* expectString Not a pure module */