You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
2.1 KiB
65 lines
2.1 KiB
|
|
|
|
import * as Block from "bs-platform/lib/es6/block.js";
|
|
import * as Curry from "bs-platform/lib/es6/curry.js";
|
|
|
|
function fromCallbag(callbag) {
|
|
return (function (sink) {
|
|
var wrappedSink = function (signal, data) {
|
|
switch (signal) {
|
|
case /* CALLBAG_START */0 :
|
|
var wrappedTalkback = function (talkbackSignal) {
|
|
if (talkbackSignal) {
|
|
return data(/* CALLBAG_END */2);
|
|
} else {
|
|
return data(/* CALLBAG_DATA */1);
|
|
}
|
|
};
|
|
return sink(/* Start */Block.__(0, [wrappedTalkback]));
|
|
case /* CALLBAG_DATA */1 :
|
|
return sink(/* Push */Block.__(1, [data]));
|
|
case /* CALLBAG_END */2 :
|
|
return sink(/* End */0);
|
|
|
|
}
|
|
};
|
|
return Curry._2(callbag, /* CALLBAG_START */0, wrappedSink);
|
|
});
|
|
}
|
|
|
|
function toCallbag(source) {
|
|
return (function (signal, data) {
|
|
if (signal === /* CALLBAG_START */0) {
|
|
return Curry._1(source, (function (signal) {
|
|
if (typeof signal === "number") {
|
|
return Curry._2(data, /* CALLBAG_END */2, undefined);
|
|
}
|
|
if (signal.tag) {
|
|
return Curry._2(data, /* CALLBAG_DATA */1, signal[0]);
|
|
}
|
|
var talkbackFn = signal[0];
|
|
var wrappedTalkbackFn = function (talkback) {
|
|
switch (talkback) {
|
|
case /* CALLBAG_START */0 :
|
|
return ;
|
|
case /* CALLBAG_DATA */1 :
|
|
return talkbackFn(/* Pull */0);
|
|
case /* CALLBAG_END */2 :
|
|
return talkbackFn(/* Close */1);
|
|
|
|
}
|
|
};
|
|
return Curry._2(data, /* CALLBAG_START */0, wrappedTalkbackFn);
|
|
}));
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
export {
|
|
fromCallbag ,
|
|
toCallbag ,
|
|
|
|
}
|
|
/* No side effect */
|