@explorable-viz/fluid
Version:
A functional programming language which integrates a bidirectional dynamic analysis, connecting outputs to data sources in a fine-grained way. Fluid is implemented in PureScript and runs in the browser.
1,866 lines (1,820 loc) • 962 kB
JavaScript
#!/usr/bin/env node
// output-es/runtime.js
function binding(init4) {
let state = 0;
let value;
return () => {
if (state === 2) {
return value;
}
if (state === 1) {
throw new Error("Binding demanded before initialized");
}
state = 1;
value = init4();
state = 2;
return value;
};
}
function fail() {
throw new Error("Failed pattern match");
}
function intDiv(x, y) {
if (y > 0) return Math.floor(x / y);
if (y < 0) return -Math.floor(x / -y);
return 0;
}
// output-es/Control.Monad.Reader.Trans/index.js
var withReaderT = (f) => (v) => (x) => v(f(x));
var bindReaderT = (dictBind) => {
const $0 = dictBind.Apply0();
const $1 = $0.Functor0();
const applyReaderT1 = /* @__PURE__ */ (() => {
const functorReaderT1 = {
map: (x) => {
const $2 = $1.map(x);
return (v) => (x$1) => $2(v(x$1));
}
};
return { apply: (v) => (v1) => (r) => $0.apply(v(r))(v1(r)), Functor0: () => functorReaderT1 };
})();
return { bind: (v) => (k) => (r) => dictBind.bind(v(r))((a) => k(a)(r)), Apply0: () => applyReaderT1 };
};
var monadReaderT = (dictMonad) => {
const $0 = dictMonad.Applicative0();
const $1 = $0.Apply0();
const applicativeReaderT1 = (() => {
const $2 = $1.Functor0();
const functorReaderT1 = {
map: (x) => {
const $3 = $2.map(x);
return (v) => (x$1) => $3(v(x$1));
}
};
const applyReaderT1 = { apply: (v) => (v1) => (r) => $1.apply(v(r))(v1(r)), Functor0: () => functorReaderT1 };
return {
pure: (x) => {
const $3 = $0.pure(x);
return (v) => $3;
},
Apply0: () => applyReaderT1
};
})();
const bindReaderT1 = bindReaderT(dictMonad.Bind1());
return { Applicative0: () => applicativeReaderT1, Bind1: () => bindReaderT1 };
};
var monadReaderReaderT = (dictMonad) => {
const monadReaderT12 = monadReaderT(dictMonad);
const monadAskReaderT1 = { ask: dictMonad.Applicative0().pure, Monad0: () => monadReaderT12 };
return { local: withReaderT, MonadAsk0: () => monadAskReaderT1 };
};
var monadEffectReader = (dictMonadEffect) => {
const monadReaderT12 = monadReaderT(dictMonadEffect.Monad0());
return {
liftEffect: (x) => {
const $0 = dictMonadEffect.liftEffect(x);
return (v) => $0;
},
Monad0: () => monadReaderT12
};
};
var monadThrowReaderT = (dictMonadThrow) => {
const monadReaderT12 = monadReaderT(dictMonadThrow.Monad0());
return {
throwError: (x) => {
const $0 = dictMonadThrow.throwError(x);
return (v) => $0;
},
Monad0: () => monadReaderT12
};
};
var monadErrorReaderT = (dictMonadError) => {
const monadThrowReaderT1 = monadThrowReaderT(dictMonadError.MonadThrow0());
return { catchError: (v) => (h) => (r) => dictMonadError.catchError(v(r))((e) => h(e)(r)), MonadThrow0: () => monadThrowReaderT1 };
};
// output-es/Data.Function/index.js
var $$const = (a) => (v) => a;
var applyFlipped = (x) => (f) => f(x);
// output-es/Control.Semigroupoid/index.js
var semigroupoidFn = { compose: (f) => (g) => (x) => f(g(x)) };
// output-es/Type.Proxy/index.js
var $$$Proxy = () => ({ tag: "Proxy" });
var $$Proxy = /* @__PURE__ */ $$$Proxy();
// output-es/Data.Functor/foreign.js
var arrayMap = function(f) {
return function(arr) {
var l = arr.length;
var result = new Array(l);
for (var i = 0; i < l; i++) {
result[i] = f(arr[i]);
}
return result;
};
};
// output-es/Data.Functor/index.js
var functorArray = { map: arrayMap };
// output-es/Control.Apply/foreign.js
var arrayApply = function(fs) {
return function(xs) {
var l = fs.length;
var k = xs.length;
var result = new Array(l * k);
var n = 0;
for (var i = 0; i < l; i++) {
var f = fs[i];
for (var j = 0; j < k; j++) {
result[n++] = f(xs[j]);
}
}
return result;
};
};
// output-es/Control.Apply/index.js
var identity = (x) => x;
// output-es/Control.Bind/foreign.js
var arrayBind = function(arr) {
return function(f) {
var result = [];
for (var i = 0, l = arr.length; i < l; i++) {
Array.prototype.push.apply(result, f(arr[i]));
}
return result;
};
};
// output-es/Control.Bind/index.js
var identity2 = (x) => x;
// output-es/Data.Show/foreign.js
var showIntImpl = function(n) {
return n.toString();
};
var showNumberImpl = function(n) {
var str = n.toString();
return isNaN(str + ".0") ? str : str + ".0";
};
var showCharImpl = function(c) {
var code = c.charCodeAt(0);
if (code < 32 || code === 127) {
switch (c) {
case "\x07":
return "'\\a'";
case "\b":
return "'\\b'";
case "\f":
return "'\\f'";
case "\n":
return "'\\n'";
case "\r":
return "'\\r'";
case " ":
return "'\\t'";
case "\v":
return "'\\v'";
}
return "'\\" + code.toString(10) + "'";
}
return c === "'" || c === "\\" ? "'\\" + c + "'" : "'" + c + "'";
};
var showStringImpl = function(s) {
var l = s.length;
return '"' + s.replace(
/[\0-\x1F\x7F"\\]/g,
// eslint-disable-line no-control-regex
function(c, i) {
switch (c) {
case '"':
case "\\":
return "\\" + c;
case "\x07":
return "\\a";
case "\b":
return "\\b";
case "\f":
return "\\f";
case "\n":
return "\\n";
case "\r":
return "\\r";
case " ":
return "\\t";
case "\v":
return "\\v";
}
var k = i + 1;
var empty2 = k < l && s[k] >= "0" && s[k] <= "9" ? "\\&" : "";
return "\\" + c.charCodeAt(0).toString(10) + empty2;
}
) + '"';
};
var showArrayImpl = function(f) {
return function(xs) {
var ss = [];
for (var i = 0, l = xs.length; i < l; i++) {
ss[i] = f(xs[i]);
}
return "[" + ss.join(",") + "]";
};
};
// output-es/Data.Show/index.js
var showUnit = { show: (v) => "unit" };
var showString = { show: showStringImpl };
var showInt = { show: showIntImpl };
// output-es/Data.Generic.Rep/index.js
var $NoArguments = () => ({ tag: "NoArguments" });
var $Product = (_1, _2) => ({ tag: "Product", _1, _2 });
var $Sum = (tag, _1) => ({ tag, _1 });
var NoArguments = /* @__PURE__ */ $NoArguments();
// output-es/Data.Ordering/index.js
var $Ordering = (tag) => tag;
var LT = /* @__PURE__ */ $Ordering("LT");
var GT = /* @__PURE__ */ $Ordering("GT");
var EQ = /* @__PURE__ */ $Ordering("EQ");
// output-es/Data.Maybe/index.js
var $Maybe = (tag, _1) => ({ tag, _1 });
var Nothing = /* @__PURE__ */ $Maybe("Nothing");
var Just = (value0) => $Maybe("Just", value0);
var isNothing = (v2) => {
if (v2.tag === "Nothing") {
return true;
}
if (v2.tag === "Just") {
return false;
}
fail();
};
var functorMaybe = {
map: (v) => (v1) => {
if (v1.tag === "Just") {
return $Maybe("Just", v(v1._1));
}
return Nothing;
}
};
var applyMaybe = {
apply: (v) => (v1) => {
if (v.tag === "Just") {
if (v1.tag === "Just") {
return $Maybe("Just", v._1(v1._1));
}
return Nothing;
}
if (v.tag === "Nothing") {
return Nothing;
}
fail();
},
Functor0: () => functorMaybe
};
var applicativeMaybe = { pure: Just, Apply0: () => applyMaybe };
// output-es/Data.Either/index.js
var $Either = (tag, _1) => ({ tag, _1 });
var Left = (value0) => $Either("Left", value0);
var Right = (value0) => $Either("Right", value0);
var functorEither = {
map: (f) => (m) => {
if (m.tag === "Left") {
return $Either("Left", m._1);
}
if (m.tag === "Right") {
return $Either("Right", f(m._1));
}
fail();
}
};
var choose = (dictAlt) => {
const $0 = dictAlt.Functor0();
return (a) => (b) => dictAlt.alt($0.map(Left)(a))($0.map(Right)(b));
};
// output-es/Data.Identity/index.js
var Identity = (x) => x;
var functorIdentity = { map: (f) => (m) => f(m) };
var applyIdentity = { apply: (v) => (v1) => v(v1), Functor0: () => functorIdentity };
var bindIdentity = { bind: (v) => (f) => f(v), Apply0: () => applyIdentity };
var applicativeIdentity = { pure: Identity, Apply0: () => applyIdentity };
var monadIdentity = { Applicative0: () => applicativeIdentity, Bind1: () => bindIdentity };
// output-es/Effect/foreign.js
var pureE = function(a) {
return function() {
return a;
};
};
// output-es/Effect/index.js
var applyEffect = {
apply: (f) => (a) => () => {
const f$p = f();
const a$p = a();
return applicativeEffect.pure(f$p(a$p))();
},
Functor0: () => functorEffect
};
var applicativeEffect = { pure: pureE, Apply0: () => applyEffect };
var functorEffect = {
map: (f) => (a) => () => {
const a$p = a();
return f(a$p);
}
};
// output-es/Control.Monad.Rec.Class/index.js
var $Step = (tag, _1) => ({ tag, _1 });
var Loop = (value0) => $Step("Loop", value0);
var monadRecIdentity = {
tailRecM: (f) => {
const go = (go$a0$copy) => {
let go$a0 = go$a0$copy, go$c = true, go$r;
while (go$c) {
const v = go$a0;
if (v.tag === "Loop") {
go$a0 = f(v._1);
continue;
}
if (v.tag === "Done") {
go$c = false;
go$r = v._1;
continue;
}
fail();
}
return go$r;
};
return (x) => go(f(x));
},
Monad0: () => monadIdentity
};
// output-es/Control.Monad.ST.Internal/foreign.js
var map_ = function(f) {
return function(a) {
return function() {
return f(a());
};
};
};
var pure_ = function(a) {
return function() {
return a;
};
};
var bind_ = function(a) {
return function(f) {
return function() {
return f(a())();
};
};
};
// output-es/Control.Monad.ST.Internal/index.js
var functorST = { map: map_ };
var monadST = { Applicative0: () => applicativeST, Bind1: () => bindST };
var bindST = { bind: bind_, Apply0: () => applyST };
var applyST = {
apply: (f) => (a) => () => {
const f$p = f();
const a$p = a();
return applicativeST.pure(f$p(a$p))();
},
Functor0: () => functorST
};
var applicativeST = { pure: pure_, Apply0: () => applyST };
var monadRecST = {
tailRecM: (f) => (a) => {
const $0 = f(a);
return () => {
const $1 = $0();
let r = $1;
while ((() => {
const $22 = r;
return $22.tag === "Loop";
})()) {
const v = r;
if (v.tag === "Loop") {
const e = f(v._1)();
r = e;
continue;
}
if (v.tag === "Done") {
continue;
}
fail();
}
const $2 = r;
if ($2.tag === "Done") {
return $2._1;
}
fail();
};
},
Monad0: () => monadST
};
// output-es/Data.Array.ST.Iterator/index.js
var $Iterator = (_1, _2) => ({ tag: "Iterator", _1, _2 });
var pushWhile = (p) => (iter) => (array) => () => {
let $$break = false;
const $0 = iter._2;
while (/* @__PURE__ */ (() => {
const $1 = $$break;
return !$1;
})()) {
const i = $0.value;
const mx = iter._1(i);
if (mx.tag === "Just" && p(mx._1)) {
array.push(mx._1);
iter._2.value;
const $1 = iter._2.value;
iter._2.value = $1 + 1 | 0;
continue;
}
$$break = true;
}
};
var iterate = (iter) => (f) => () => {
let $$break = false;
const $0 = iter._2;
while (/* @__PURE__ */ (() => {
const $1 = $$break;
return !$1;
})()) {
const i = $0.value;
const $1 = $0.value;
$0.value = $1 + 1 | 0;
const mx = iter._1(i);
if (mx.tag === "Just") {
f(mx._1)();
continue;
}
if (mx.tag === "Nothing") {
$$break = true;
continue;
}
fail();
}
};
// output-es/Data.Maybe.First/index.js
var semigroupFirst = {
append: (v) => (v1) => {
if (v.tag === "Just") {
return v;
}
return v1;
}
};
var monoidFirst = { mempty: Nothing, Semigroup0: () => semigroupFirst };
// output-es/Data.Foldable/foreign.js
var foldrArray = function(f) {
return function(init4) {
return function(xs) {
var acc = init4;
var len = xs.length;
for (var i = len - 1; i >= 0; i--) {
acc = f(xs[i])(acc);
}
return acc;
};
};
};
var foldlArray = function(f) {
return function(init4) {
return function(xs) {
var acc = init4;
var len = xs.length;
for (var i = 0; i < len; i++) {
acc = f(acc)(xs[i]);
}
return acc;
};
};
};
// output-es/Data.Foldable/index.js
var identity3 = (x) => x;
var monoidEndo = /* @__PURE__ */ (() => {
const semigroupEndo1 = { append: (v) => (v1) => (x) => v(v1(x)) };
return { mempty: (x) => x, Semigroup0: () => semigroupEndo1 };
})();
var foldableTuple = { foldr: (f) => (z) => (v) => f(v._2)(z), foldl: (f) => (z) => (v) => f(z)(v._2), foldMap: (dictMonoid) => (f) => (v) => f(v._2) };
var foldableMaybe = {
foldr: (v) => (v1) => (v2) => {
if (v2.tag === "Nothing") {
return v1;
}
if (v2.tag === "Just") {
return v(v2._1)(v1);
}
fail();
},
foldl: (v) => (v1) => (v2) => {
if (v2.tag === "Nothing") {
return v1;
}
if (v2.tag === "Just") {
return v(v1)(v2._1);
}
fail();
},
foldMap: (dictMonoid) => {
const mempty4 = dictMonoid.mempty;
return (v) => (v1) => {
if (v1.tag === "Nothing") {
return mempty4;
}
if (v1.tag === "Just") {
return v(v1._1);
}
fail();
};
}
};
var foldableArray = {
foldr: foldrArray,
foldl: foldlArray,
foldMap: (dictMonoid) => {
const mempty4 = dictMonoid.mempty;
return (f) => foldableArray.foldr((x) => (acc) => dictMonoid.Semigroup0().append(f(x))(acc))(mempty4);
}
};
var foldrDefault = (dictFoldable) => {
const foldMap22 = dictFoldable.foldMap(monoidEndo);
return (c) => (u) => (xs) => foldMap22((x) => c(x))(xs)(u);
};
var lookup = (dictFoldable) => {
const foldMap22 = dictFoldable.foldMap(monoidFirst);
return (dictEq) => (a) => foldMap22((v) => {
if (dictEq.eq(a)(v._1)) {
return $Maybe("Just", v._2);
}
return Nothing;
});
};
// output-es/Data.Tuple/index.js
var $Tuple = (_1, _2) => ({ tag: "Tuple", _1, _2 });
var Tuple = (value0) => (value1) => $Tuple(value0, value1);
var swap = (v) => $Tuple(v._2, v._1);
var snd = (v) => v._2;
var functorTuple = { map: (f) => (m) => $Tuple(m._1, f(m._2)) };
var fst = (v) => v._1;
// output-es/Data.FunctorWithIndex/foreign.js
var mapWithIndexArray = function(f) {
return function(xs) {
var l = xs.length;
var result = Array(l);
for (var i = 0; i < l; i++) {
result[i] = f(i)(xs[i]);
}
return result;
};
};
// output-es/Data.Eq/foreign.js
var refEq = function(r1) {
return function(r2) {
return r1 === r2;
};
};
var eqIntImpl = refEq;
var eqNumberImpl = refEq;
var eqCharImpl = refEq;
var eqStringImpl = refEq;
// output-es/Data.Eq/index.js
var eqUnit = { eq: (v) => (v1) => true };
var eqString = { eq: eqStringImpl };
var eqInt = { eq: eqIntImpl };
var eqChar = { eq: eqCharImpl };
// output-es/Data.Ord/foreign.js
var unsafeCompareImpl = function(lt) {
return function(eq2) {
return function(gt) {
return function(x) {
return function(y) {
return x < y ? lt : x === y ? eq2 : gt;
};
};
};
};
};
var ordIntImpl = unsafeCompareImpl;
var ordStringImpl = unsafeCompareImpl;
var ordCharImpl = unsafeCompareImpl;
// output-es/Data.Ord/index.js
var ordString = { compare: /* @__PURE__ */ ordStringImpl(LT)(EQ)(GT), Eq0: () => eqString };
var ordInt = { compare: /* @__PURE__ */ ordIntImpl(LT)(EQ)(GT), Eq0: () => eqInt };
var ordChar = { compare: /* @__PURE__ */ ordCharImpl(LT)(EQ)(GT), Eq0: () => eqChar };
// output-es/Unsafe.Coerce/foreign.js
var unsafeCoerce = function(x) {
return x;
};
// output-es/Data.Traversable/foreign.js
var traverseArrayImpl = /* @__PURE__ */ (function() {
function array1(a) {
return [a];
}
function array2(a) {
return function(b) {
return [a, b];
};
}
function array3(a) {
return function(b) {
return function(c) {
return [a, b, c];
};
};
}
function concat22(xs) {
return function(ys) {
return xs.concat(ys);
};
}
return function(apply5) {
return function(map2) {
return function(pure3) {
return function(f) {
return function(array) {
function go(bot, top) {
switch (top - bot) {
case 0:
return pure3([]);
case 1:
return map2(array1)(f(array[bot]));
case 2:
return apply5(map2(array2)(f(array[bot])))(f(array[bot + 1]));
case 3:
return apply5(apply5(map2(array3)(f(array[bot])))(f(array[bot + 1])))(f(array[bot + 2]));
default:
var pivot = bot + Math.floor((top - bot) / 4) * 2;
return apply5(map2(concat22)(go(bot, pivot)))(go(pivot, top));
}
}
return go(0, array.length);
};
};
};
};
};
})();
// output-es/Data.Traversable/index.js
var identity4 = (x) => x;
var traversableTuple = {
traverse: (dictApplicative) => (f) => (v) => dictApplicative.Apply0().Functor0().map(Tuple(v._1))(f(v._2)),
sequence: (dictApplicative) => (v) => dictApplicative.Apply0().Functor0().map(Tuple(v._1))(v._2),
Functor0: () => functorTuple,
Foldable1: () => foldableTuple
};
var traversableMaybe = {
traverse: (dictApplicative) => (v) => (v1) => {
if (v1.tag === "Nothing") {
return dictApplicative.pure(Nothing);
}
if (v1.tag === "Just") {
return dictApplicative.Apply0().Functor0().map(Just)(v(v1._1));
}
fail();
},
sequence: (dictApplicative) => (v) => {
if (v.tag === "Nothing") {
return dictApplicative.pure(Nothing);
}
if (v.tag === "Just") {
return dictApplicative.Apply0().Functor0().map(Just)(v._1);
}
fail();
},
Functor0: () => functorMaybe,
Foldable1: () => foldableMaybe
};
var traversableArray = {
traverse: (dictApplicative) => {
const Apply0 = dictApplicative.Apply0();
return traverseArrayImpl(Apply0.apply)(Apply0.Functor0().map)(dictApplicative.pure);
},
sequence: (dictApplicative) => traversableArray.traverse(dictApplicative)(identity4),
Functor0: () => functorArray,
Foldable1: () => foldableArray
};
// output-es/Data.Array/foreign.js
var rangeImpl = function(start, end) {
var step = start > end ? -1 : 1;
var result = new Array(step * (end - start) + 1);
var i = start, n = 0;
while (i !== end) {
result[n++] = i;
i += step;
}
result[n] = i;
return result;
};
var replicateFill = function(count, value) {
if (count < 1) {
return [];
}
var result = new Array(count);
return result.fill(value);
};
var replicatePolyfill = function(count, value) {
var result = [];
var n = 0;
for (var i = 0; i < count; i++) {
result[n++] = value;
}
return result;
};
var replicateImpl = typeof Array.prototype.fill === "function" ? replicateFill : replicatePolyfill;
var fromFoldableImpl = /* @__PURE__ */ (function() {
function Cons2(head, tail3) {
this.head = head;
this.tail = tail3;
}
var emptyList = {};
function curryCons(head) {
return function(tail3) {
return new Cons2(head, tail3);
};
}
function listToArray(list) {
var result = [];
var count = 0;
var xs = list;
while (xs !== emptyList) {
result[count++] = xs.head;
xs = xs.tail;
}
return result;
}
return function(foldr2, xs) {
return listToArray(foldr2(curryCons)(emptyList)(xs));
};
})();
var unconsImpl = function(empty2, next, xs) {
return xs.length === 0 ? empty2({}) : next(xs[0])(xs.slice(1));
};
var findIndexImpl = function(just, nothing, f, xs) {
for (var i = 0, l = xs.length; i < l; i++) {
if (f(xs[i])) return just(i);
}
return nothing;
};
var _updateAt = function(just, nothing, i, a, l) {
if (i < 0 || i >= l.length) return nothing;
var l1 = l.slice();
l1[i] = a;
return just(l1);
};
var reverse = function(l) {
return l.slice().reverse();
};
var concat = function(xss) {
if (xss.length <= 1e4) {
return Array.prototype.concat.apply([], xss);
}
var result = [];
for (var i = 0, l = xss.length; i < l; i++) {
var xs = xss[i];
for (var j = 0, m = xs.length; j < m; j++) {
result.push(xs[j]);
}
}
return result;
};
var filterImpl = function(f, xs) {
return xs.filter(f);
};
var sortByImpl2 = /* @__PURE__ */ (function() {
function mergeFromTo(compare, fromOrdering, xs1, xs2, from, to) {
var mid;
var i;
var j;
var k;
var x;
var y;
var c;
mid = from + (to - from >> 1);
if (mid - from > 1) mergeFromTo(compare, fromOrdering, xs2, xs1, from, mid);
if (to - mid > 1) mergeFromTo(compare, fromOrdering, xs2, xs1, mid, to);
i = from;
j = mid;
k = from;
while (i < mid && j < to) {
x = xs2[i];
y = xs2[j];
c = fromOrdering(compare(x)(y));
if (c > 0) {
xs1[k++] = y;
++j;
} else {
xs1[k++] = x;
++i;
}
}
while (i < mid) {
xs1[k++] = xs2[i++];
}
while (j < to) {
xs1[k++] = xs2[j++];
}
}
return function(compare, fromOrdering, xs) {
var out;
if (xs.length < 2) return xs;
out = xs.slice(0);
mergeFromTo(compare, fromOrdering, out, xs.slice(0), 0, xs.length);
return out;
};
})();
var sliceImpl = function(s, e, l) {
return l.slice(s, e);
};
// output-es/Data.Array/index.js
var sortBy = (comp) => ($0) => sortByImpl2(
comp,
(v) => {
if (v === "GT") {
return 1;
}
if (v === "EQ") {
return 0;
}
if (v === "LT") {
return -1;
}
fail();
},
$0
);
var sortWith = (dictOrd) => (f) => sortBy((x) => (y) => dictOrd.compare(f(x))(f(y)));
var unsnoc = (xs) => {
if (xs.length === 0) {
const $02 = xs.length - 1 | 0;
return Nothing;
}
const $0 = xs.length - 1 | 0;
if ($0 >= 0 && $0 < xs.length) {
return $Maybe("Just", { init: sliceImpl(0, xs.length - 1 | 0, xs), last: xs[$0] });
}
return Nothing;
};
var groupBy = (op) => (xs) => {
const result = [];
const $0 = { value: 0 };
const iter = $Iterator(
(v) => {
if (v >= 0 && v < xs.length) {
return $Maybe("Just", xs[v]);
}
return Nothing;
},
$0
);
iterate(iter)((x) => () => {
const sub1 = [];
sub1.push(x);
pushWhile(op(x))(iter)(sub1)();
result.push(sub1);
})();
return result;
};
var foldM = (dictMonad) => (f) => (b) => ($0) => unconsImpl((v) => dictMonad.Applicative0().pure(b), (a) => (as) => dictMonad.Bind1().bind(f(b)(a))((b$p) => foldM(dictMonad)(f)(b$p)(as)), $0);
var elem = (dictEq) => (a) => (arr) => {
const $0 = findIndexImpl(Just, Nothing, (v) => dictEq.eq(v)(a), arr);
if ($0.tag === "Nothing") {
return false;
}
if ($0.tag === "Just") {
return true;
}
fail();
};
var drop = (n) => (xs) => {
if (n < 1) {
return xs;
}
return sliceImpl(n, xs.length, xs);
};
var cons = (x) => (xs) => [x, ...xs];
var some = (dictAlternative) => (dictLazy) => (v) => dictAlternative.Applicative0().Apply0().apply(dictAlternative.Plus1().Alt0().Functor0().map(cons)(v))(dictLazy.defer((v1) => many(dictAlternative)(dictLazy)(v)));
var many = (dictAlternative) => (dictLazy) => (v) => dictAlternative.Plus1().Alt0().alt(some(dictAlternative)(dictLazy)(v))(dictAlternative.Applicative0().pure([]));
var concatMap = (b) => (a) => arrayBind(a)(b);
var mapMaybe = (f) => concatMap((x) => {
const $0 = f(x);
if ($0.tag === "Nothing") {
return [];
}
if ($0.tag === "Just") {
return [$0._1];
}
fail();
});
// output-es/Data.String.Unsafe/foreign.js
var charAt = function(i) {
return function(s) {
if (i >= 0 && i < s.length) return s.charAt(i);
throw new Error("Data.String.Unsafe.charAt: Invalid index.");
};
};
// output-es/Data.String.CodeUnits/foreign.js
var fromCharArray = function(a) {
return a.join("");
};
var toCharArray = function(s) {
return s.split("");
};
var singleton = function(c) {
return c;
};
var _charAt = function(just) {
return function(nothing) {
return function(i) {
return function(s) {
return i >= 0 && i < s.length ? just(s.charAt(i)) : nothing;
};
};
};
};
var length2 = function(s) {
return s.length;
};
var _indexOf = function(just) {
return function(nothing) {
return function(x) {
return function(s) {
var i = s.indexOf(x);
return i === -1 ? nothing : just(i);
};
};
};
};
var take = function(n) {
return function(s) {
return s.substr(0, n);
};
};
var drop2 = function(n) {
return function(s) {
return s.substring(n);
};
};
var splitAt = function(i) {
return function(s) {
return { before: s.substring(0, i), after: s.substring(i) };
};
};
// output-es/Data.String.CodeUnits/index.js
var stripPrefix = (v) => (str) => {
const v1 = splitAt(length2(v))(str);
if (v1.before === v) {
return $Maybe("Just", v1.after);
}
return Nothing;
};
var indexOf = /* @__PURE__ */ _indexOf(Just)(Nothing);
var charAt2 = /* @__PURE__ */ _charAt(Just)(Nothing);
// output-es/Data.String.Common/foreign.js
var split = function(sep) {
return function(s) {
return s.split(sep);
};
};
var joinWith = function(s) {
return function(xs) {
return xs.join(s);
};
};
// output-es/Effect.Exception/foreign.js
function showErrorImpl(err) {
return err.stack || err.toString();
}
function error(msg) {
return new Error(msg);
}
function message(e) {
return e.message;
}
function throwException(e) {
return function() {
throw e;
};
}
// output-es/Control.Monad.Error.Class/index.js
var $$try = (dictMonadError) => {
const Monad0 = dictMonadError.MonadThrow0().Monad0();
return (a) => dictMonadError.catchError(Monad0.Bind1().Apply0().Functor0().map(Right)(a))((x) => Monad0.Applicative0().pure($Either("Left", x)));
};
// output-es/Partial/foreign.js
var _crashWith = function(msg) {
throw new Error(msg);
};
// output-es/Effect.Aff/foreign.js
var Aff = (function() {
var EMPTY = {};
var PURE = "Pure";
var THROW = "Throw";
var CATCH = "Catch";
var SYNC = "Sync";
var ASYNC = "Async";
var BIND = "Bind";
var BRACKET = "Bracket";
var FORK = "Fork";
var SEQ = "Sequential";
var MAP = "Map";
var APPLY = "Apply";
var ALT = "Alt";
var CONS = "Cons";
var RESUME = "Resume";
var RELEASE = "Release";
var FINALIZER = "Finalizer";
var FINALIZED = "Finalized";
var FORKED = "Forked";
var FIBER = "Fiber";
var THUNK = "Thunk";
function Aff2(tag, _1, _2, _3) {
this.tag = tag;
this._1 = _1;
this._2 = _2;
this._3 = _3;
}
function AffCtr(tag) {
var fn = function(_1, _2, _3) {
return new Aff2(tag, _1, _2, _3);
};
fn.tag = tag;
return fn;
}
function nonCanceler2(error3) {
return new Aff2(PURE, void 0);
}
function runEff(eff) {
try {
eff();
} catch (error3) {
setTimeout(function() {
throw error3;
}, 0);
}
}
function runSync(left, right, eff) {
try {
return right(eff());
} catch (error3) {
return left(error3);
}
}
function runAsync(left, eff, k) {
try {
return eff(k)();
} catch (error3) {
k(left(error3))();
return nonCanceler2;
}
}
var Scheduler = (function() {
var limit = 1024;
var size4 = 0;
var ix = 0;
var queue = new Array(limit);
var draining = false;
function drain() {
var thunk;
draining = true;
while (size4 !== 0) {
size4--;
thunk = queue[ix];
queue[ix] = void 0;
ix = (ix + 1) % limit;
thunk();
}
draining = false;
}
return {
isDraining: function() {
return draining;
},
enqueue: function(cb) {
var i, tmp;
if (size4 === limit) {
tmp = draining;
drain();
draining = tmp;
}
queue[(ix + size4) % limit] = cb;
size4++;
if (!draining) {
drain();
}
}
};
})();
function Supervisor(util2) {
var fibers = {};
var fiberId = 0;
var count = 0;
return {
register: function(fiber) {
var fid = fiberId++;
fiber.onComplete({
rethrow: true,
handler: function(result) {
return function() {
count--;
delete fibers[fid];
};
}
})();
fibers[fid] = fiber;
count++;
},
isEmpty: function() {
return count === 0;
},
killAll: function(killError, cb) {
return function() {
if (count === 0) {
return cb();
}
var killCount = 0;
var kills = {};
function kill(fid) {
kills[fid] = fibers[fid].kill(killError, function(result) {
return function() {
delete kills[fid];
killCount--;
if (util2.isLeft(result) && util2.fromLeft(result)) {
setTimeout(function() {
throw util2.fromLeft(result);
}, 0);
}
if (killCount === 0) {
cb();
}
};
})();
}
for (var k in fibers) {
if (fibers.hasOwnProperty(k)) {
killCount++;
kill(k);
}
}
fibers = {};
fiberId = 0;
count = 0;
return function(error3) {
return new Aff2(SYNC, function() {
for (var k2 in kills) {
if (kills.hasOwnProperty(k2)) {
kills[k2]();
}
}
});
};
};
}
};
}
var SUSPENDED = 0;
var CONTINUE = 1;
var STEP_BIND = 2;
var STEP_RESULT = 3;
var PENDING = 4;
var RETURN = 5;
var COMPLETED = 6;
function Fiber(util2, supervisor, aff) {
var runTick = 0;
var status = SUSPENDED;
var step = aff;
var fail3 = null;
var interrupt = null;
var bhead = null;
var btail = null;
var attempts = null;
var bracketCount = 0;
var joinId = 0;
var joins = null;
var rethrow = true;
function run2(localRunTick) {
var tmp, result, attempt;
while (true) {
tmp = null;
result = null;
attempt = null;
switch (status) {
case STEP_BIND:
status = CONTINUE;
try {
step = bhead(step);
if (btail === null) {
bhead = null;
} else {
bhead = btail._1;
btail = btail._2;
}
} catch (e) {
status = RETURN;
fail3 = util2.left(e);
step = null;
}
break;
case STEP_RESULT:
if (util2.isLeft(step)) {
status = RETURN;
fail3 = step;
step = null;
} else if (bhead === null) {
status = RETURN;
} else {
status = STEP_BIND;
step = util2.fromRight(step);
}
break;
case CONTINUE:
switch (step.tag) {
case BIND:
if (bhead) {
btail = new Aff2(CONS, bhead, btail);
}
bhead = step._2;
status = CONTINUE;
step = step._1;
break;
case PURE:
if (bhead === null) {
status = RETURN;
step = util2.right(step._1);
} else {
status = STEP_BIND;
step = step._1;
}
break;
case SYNC:
status = STEP_RESULT;
step = runSync(util2.left, util2.right, step._1);
break;
case ASYNC:
status = PENDING;
step = runAsync(util2.left, step._1, function(result2) {
return function() {
if (runTick !== localRunTick) {
return;
}
runTick++;
Scheduler.enqueue(function() {
if (runTick !== localRunTick + 1) {
return;
}
status = STEP_RESULT;
step = result2;
run2(runTick);
});
};
});
return;
case THROW:
status = RETURN;
fail3 = util2.left(step._1);
step = null;
break;
// Enqueue the Catch so that we can call the error handler later on
// in case of an exception.
case CATCH:
if (bhead === null) {
attempts = new Aff2(CONS, step, attempts, interrupt);
} else {
attempts = new Aff2(CONS, step, new Aff2(CONS, new Aff2(RESUME, bhead, btail), attempts, interrupt), interrupt);
}
bhead = null;
btail = null;
status = CONTINUE;
step = step._1;
break;
// Enqueue the Bracket so that we can call the appropriate handlers
// after resource acquisition.
case BRACKET:
bracketCount++;
if (bhead === null) {
attempts = new Aff2(CONS, step, attempts, interrupt);
} else {
attempts = new Aff2(CONS, step, new Aff2(CONS, new Aff2(RESUME, bhead, btail), attempts, interrupt), interrupt);
}
bhead = null;
btail = null;
status = CONTINUE;
step = step._1;
break;
case FORK:
status = STEP_RESULT;
tmp = Fiber(util2, supervisor, step._2);
if (supervisor) {
supervisor.register(tmp);
}
if (step._1) {
tmp.run();
}
step = util2.right(tmp);
break;
case SEQ:
status = CONTINUE;
step = sequential(util2, supervisor, step._1);
break;
}
break;
case RETURN:
bhead = null;
btail = null;
if (attempts === null) {
status = COMPLETED;
step = interrupt || fail3 || step;
} else {
tmp = attempts._3;
attempt = attempts._1;
attempts = attempts._2;
switch (attempt.tag) {
// We cannot recover from an unmasked interrupt. Otherwise we should
// continue stepping, or run the exception handler if an exception
// was raised.
case CATCH:
if (interrupt && interrupt !== tmp && bracketCount === 0) {
status = RETURN;
} else if (fail3) {
status = CONTINUE;
step = attempt._2(util2.fromLeft(fail3));
fail3 = null;
}
break;
// We cannot resume from an unmasked interrupt or exception.
case RESUME:
if (interrupt && interrupt !== tmp && bracketCount === 0 || fail3) {
status = RETURN;
} else {
bhead = attempt._1;
btail = attempt._2;
status = STEP_BIND;
step = util2.fromRight(step);
}
break;
// If we have a bracket, we should enqueue the handlers,
// and continue with the success branch only if the fiber has
// not been interrupted. If the bracket acquisition failed, we
// should not run either.
case BRACKET:
bracketCount--;
if (fail3 === null) {
result = util2.fromRight(step);
attempts = new Aff2(CONS, new Aff2(RELEASE, attempt._2, result), attempts, tmp);
if (interrupt === tmp || bracketCount > 0) {
status = CONTINUE;
step = attempt._3(result);
}
}
break;
// Enqueue the appropriate handler. We increase the bracket count
// because it should not be cancelled.
case RELEASE:
attempts = new Aff2(CONS, new Aff2(FINALIZED, step, fail3), attempts, interrupt);
status = CONTINUE;
if (interrupt && interrupt !== tmp && bracketCount === 0) {
step = attempt._1.killed(util2.fromLeft(interrupt))(attempt._2);
} else if (fail3) {
step = attempt._1.failed(util2.fromLeft(fail3))(attempt._2);
} else {
step = attempt._1.completed(util2.fromRight(step))(attempt._2);
}
fail3 = null;
bracketCount++;
break;
case FINALIZER:
bracketCount++;
attempts = new Aff2(CONS, new Aff2(FINALIZED, step, fail3), attempts, interrupt);
status = CONTINUE;
step = attempt._1;
break;
case FINALIZED:
bracketCount--;
status = RETURN;
step = attempt._1;
fail3 = attempt._2;
break;
}
}
break;
case COMPLETED:
for (var k in joins) {
if (joins.hasOwnProperty(k)) {
rethrow = rethrow && joins[k].rethrow;
runEff(joins[k].handler(step));
}
}
joins = null;
if (interrupt && fail3) {
setTimeout(function() {
throw util2.fromLeft(fail3);
}, 0);
} else if (util2.isLeft(step) && rethrow) {
setTimeout(function() {
if (rethrow) {
throw util2.fromLeft(step);
}
}, 0);
}
return;
case SUSPENDED:
status = CONTINUE;
break;
case PENDING:
return;
}
}
}
function onComplete(join2) {
return function() {
if (status === COMPLETED) {
rethrow = rethrow && join2.rethrow;
join2.handler(step)();
return function() {
};
}
var jid = joinId++;
joins = joins || {};
joins[jid] = join2;
return function() {
if (joins !== null) {
delete joins[jid];
}
};
};
}
function kill(error3, cb) {
return function() {
if (status === COMPLETED) {
cb(util2.right(void 0))();
return function() {
};
}
var canceler = onComplete({
rethrow: false,
handler: function() {
return cb(util2.right(void 0));
}
})();
switch (status) {
case SUSPENDED:
interrupt = util2.left(error3);
status = COMPLETED;
step = interrupt;
run2(runTick);
break;
case PENDING:
if (interrupt === null) {
interrupt = util2.left(error3);
}
if (bracketCount === 0) {
if (status === PENDING) {
attempts = new Aff2(CONS, new Aff2(FINALIZER, step(error3)), attempts, interrupt);
}
status = RETURN;
step = null;
fail3 = null;
run2(++runTick);
}
break;
default:
if (interrupt === null) {
interrupt = util2.left(error3);
}
if (bracketCount === 0) {
status = RETURN;
step = null;
fail3 = null;
}
}
return canceler;
};
}
function join(cb) {
return function() {
var canceler = onComplete({
rethrow: false,
handler: cb
})();
if (status === SUSPENDED) {
run2(runTick);
}
return canceler;
};
}
return {
kill,
join,
onComplete,
isSuspended: function() {
return status === SUSPENDED;
},
run: function() {
if (status === SUSPENDED) {
if (!Scheduler.isDraining()) {
Scheduler.enqueue(function() {
run2(runTick);
});
} else {
run2(runTick);
}
}
}
};
}
function runPar(util2, supervisor, par, cb) {
var fiberId = 0;
var fibers = {};
var killId = 0;
var kills = {};
var early = new Error("[ParAff] Early exit");
var interrupt = null;
var root = EMPTY;
function kill(error3, par2, cb2) {
var step = par2;
var head = null;
var tail3 = null;
var count = 0;
var kills2 = {};
var tmp, kid;
loop: while (true) {
tmp = null;
switch (step.tag) {
case FORKED:
if (step._3 === EMPTY) {
tmp = fibers[step._1];
kills2[count++] = tmp.kill(error3, function(result) {
return function() {
count--;
if (count === 0) {
cb2(result)();
}
};
});
}
if (head === null) {
break loop;
}
step = head._2;
if (tail3 === null) {
head = null;
} else {
head = tail3._1;
tail3 = tail3._2;
}
break;
case MAP:
step = step._2;
break;
case APPLY:
case ALT:
if (head) {
tail3 = new Aff2(CONS, head, tail3);
}
head = step;
step = step._1;
break;
}
}
if (count === 0) {
cb2(util2.right(void 0))();
} else {
kid = 0;
tmp = count;
for (; kid < tmp; kid++) {
kills2[kid] = kills2[kid]();
}
}
return kills2;
}
function join(result, head, tail3) {
var fail3, step, lhs, rhs, tmp, kid;
if (util2.isLeft(result)) {
fail3 = result;
step = null;
} else {
step = result;
fail3 = null;
}
loop: while (true) {
lhs = null;
rhs = null;
tmp = null;
kid = null;
if (interrupt !== null) {
return;
}
if (head === null) {
cb(fail3 || step)();
return;
}
if (head._3 !== EMPTY) {
return;
}
switch (head.tag) {
case MAP:
if (fail3 === null) {
head._3 = util2.right(head._1(util2.fromRight(step)));
step = head._3;
} else {
head._3 = fail3;
}
break;
case APPLY:
lhs = head._1._3;
rhs = head._2._3;
if (fail3) {
head._3 = fail3;
tmp = true;
kid = killId++;
kills[kid] = kill(early, fail3 === lhs ? head._2 : head._1, function() {
return function() {
delete kills[kid];
if (tmp) {
tmp = false;
} else if (tail3 === null) {
join(fail3, null, null);
} else {
join(fail3, tail3._1, tail3._2);
}
};
});
if (tmp) {
tmp = false;
return;
}
} else if (lhs === EMPTY || rhs === EMPTY) {
return;
} else {
step = util2.right(util2.fromRight(lhs)(util2.fromRight(rhs)));
head._3 = step;
}
break;
case ALT:
lhs = head._1._3;
rhs = head._2._3;
if (lhs === EMPTY && util2.isLeft(rhs) || rhs === EMPTY && util2.isLeft(lhs)) {
return;
}
if (lhs !== EMPTY && util2.isLeft(lhs) && rhs !== EMPTY && util2.isLeft(rhs)) {
fail3 = step === lhs ? rhs : lhs;
step = null;
head._3 = fail3;
} else {
head._3 = step;
tmp = true;
kid = killId++;
kills[kid] = kill(early, step === lhs ? head._2 : head._1, function() {
return function() {
delete kills[kid];
if (tmp) {
tmp = false;
} else if (tail3 === null) {
join(step, null, null);
} else {
join(step, tail3._1, tail3._2);
}
};
});
if (tmp) {
tmp = false;
return;
}
}
break;
}
if (tail3 === null) {
head = null;
} else {
head = tail3._1;
tail3 = tail3._2;
}
}
}
function resolve(fiber) {
return function(result) {
return function() {
delete fibers[fiber._1];
fiber._3 = result;
join(result, fiber._2._1, fiber._2._2);
};
};
}
function run2() {
var status = CONTINUE;
var step = par;
var head = null;
var tail3 = null;
var tmp, fid;
loop: while (true) {
tmp = null;
fid = null;
switch (status) {
case CONTINUE:
switch (step.tag) {
case MAP:
if (head) {
tail3 = new Aff2(CONS, head, tail3);
}
head = new Aff2(MAP, step._1, EMPTY, EMPTY);
step = step._2;
break;
case APPLY:
if (head) {
tail3 = new Aff2(CONS, head, tail3);
}
head = new Aff2(APPLY, EMPTY, step._2, EMPTY);
step = step._1;
break;
case ALT:
if (head) {
tail3 = new Aff2(CONS, head, tail3);
}
head = new Aff2(ALT, EMPTY, step._2, EMPTY);
step = step._1;
break;
default:
fid = fiberId++;
status = RETURN;
tmp = step;
step = new Aff2(FORKED, fid, new Aff2(CONS, head, tail3), EMPTY);
tmp = Fiber(util2, supervisor, tmp);
tmp.onComplete({
rethrow: false,
handler: resolve(step)
})();
fibers[fid] = tmp;
if (supervisor) {
supervisor.register(tmp);
}
}
break;
case RETURN:
if (head === null) {
break loop;
}
if (head._1 === EMPTY) {
head._1 = step;
status = CONTINUE;
step = head._2;
head._2 = EMPTY;
} else {
head._2 = step;
step = head;
if (tail3 === null) {
head = null;
} else {
head = tail3._1;
tail3 = tail3._2;
}
}
}
}
root = step;
for (fid = 0; fid < fiberId; fid++) {
fibers[fid].run();
}
}
function cancel(error3, cb2) {
interrupt = util2.left(error3);
var innerKills;
for (var kid in kills) {
if (kills.hasOwnProperty(kid)) {
innerKills = kills[kid];
for (kid in innerKills) {
if (innerKills.hasOwnProperty(kid)) {
innerKills[kid]();
}
}
}
}
kills = null;
var newKills = kill(error3, root, cb2);
return function(killError) {
return new Aff2(ASYNC, function(killCb) {
return function() {
for (var kid2 in newKills) {
if (newKills.hasOwnProperty(kid2)) {
newKills[kid2]();
}
}
return nonCanceler2;
};
});
};
}
run2();
return function(killError) {
return new Aff2(ASYNC, function(killCb) {
return function() {
return cancel(killError, killCb);
};
});
};
}
function sequential(util2, supervisor, par) {
return new Aff2(ASYNC, function(cb) {
return function() {
return runPar(util2, supervisor, par, cb);
};
});
}
Aff2.EMPTY = EMPTY;
Aff2.Pure = AffCtr(PURE);
Aff2.Throw = AffCtr(THROW);
Aff2.Catch = AffCtr(CATCH);
Aff2.Sync = AffCtr(SYNC);
Aff2.Async = AffCtr(ASYNC);
Aff2.Bind = AffCtr(BIND);
Aff2.Bracket = AffCtr(BRACKET);
Aff2.Fork = AffCtr(FORK);