eff
Version:
An extensible effect monad based on the freer monad
52 lines (41 loc) • 4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.interpretOutputStdOut = exports.interpretOutput = exports.putStringLine = exports.putString = void 0;
var _daggy = _interopRequireDefault(require("daggy"));
var _eff = require("./eff.js");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Output = _daggy.default.taggedSum("Output", {
putString: ["string"]
});
var putString = function putString(s) {
return (0, _eff.send)(Output.putString(s));
};
exports.putString = putString;
var putStringLine = function putStringLine(s) {
return (0, _eff.send)(Output.putString(s + "\n"));
};
exports.putStringLine = putStringLine;
var interpretOutput = function interpretOutput(outputStream) {
return (0, _eff.interpreter)({
predicate: function predicate(x) {
return Output.is(x);
},
handler: function handler(outputEffect) {
return outputEffect.cata({
putString: function putString(string) {
return function (continuation) {
outputStream.write(string, "utf8", function () {
return continuation(null);
});
};
}
});
}
});
};
exports.interpretOutput = interpretOutput;
var interpretOutputStdOut = interpretOutput(process.stdout);
exports.interpretOutputStdOut = interpretOutputStdOut;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NvdXJjZXMvb3V0cHV0LmpzIl0sIm5hbWVzIjpbIk91dHB1dCIsImRhZ2d5IiwidGFnZ2VkU3VtIiwicHV0U3RyaW5nIiwicyIsInB1dFN0cmluZ0xpbmUiLCJpbnRlcnByZXRPdXRwdXQiLCJvdXRwdXRTdHJlYW0iLCJwcmVkaWNhdGUiLCJ4IiwiaXMiLCJoYW5kbGVyIiwib3V0cHV0RWZmZWN0IiwiY2F0YSIsInN0cmluZyIsImNvbnRpbnVhdGlvbiIsIndyaXRlIiwiaW50ZXJwcmV0T3V0cHV0U3RkT3V0IiwicHJvY2VzcyIsInN0ZG91dCJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBOztBQUVBOzs7O0FBRUEsSUFBTUEsTUFBTSxHQUFHQyxlQUFNQyxTQUFOLENBQWdCLFFBQWhCLEVBQTBCO0FBQ3hDQyxFQUFBQSxTQUFTLEVBQUUsQ0FBQyxRQUFEO0FBRDZCLENBQTFCLENBQWY7O0FBSU8sSUFBTUEsU0FBUyxHQUFHLFNBQVpBLFNBQVksQ0FBQ0MsQ0FBRDtBQUFBLFNBQWUsZUFBS0osTUFBTSxDQUFDRyxTQUFQLENBQWlCQyxDQUFqQixDQUFMLENBQWY7QUFBQSxDQUFsQjs7OztBQUNBLElBQU1DLGFBQWEsR0FBRyxTQUFoQkEsYUFBZ0IsQ0FBQ0QsQ0FBRDtBQUFBLFNBQWUsZUFBS0osTUFBTSxDQUFDRyxTQUFQLENBQWlCQyxDQUFDLEdBQUcsSUFBckIsQ0FBTCxDQUFmO0FBQUEsQ0FBdEI7Ozs7QUFFQSxJQUFNRSxlQUFlLEdBQUcsU0FBbEJBLGVBQWtCLENBQUNDLFlBQUQ7QUFBQSxTQUM5QixzQkFBWTtBQUNYQyxJQUFBQSxTQUFTLEVBQUUsbUJBQUFDLENBQUM7QUFBQSxhQUFJVCxNQUFNLENBQUNVLEVBQVAsQ0FBVUQsQ0FBVixDQUFKO0FBQUEsS0FERDtBQUVYRSxJQUFBQSxPQUFPLEVBQUUsaUJBQUFDLFlBQVk7QUFBQSxhQUNwQkEsWUFBWSxDQUFDQyxJQUFiLENBQWtCO0FBQ2pCVixRQUFBQSxTQUFTLEVBQUUsbUJBQUFXLE1BQU07QUFBQSxpQkFBSSxVQUFBQyxZQUFZLEVBQUk7QUFDcENSLFlBQUFBLFlBQVksQ0FBQ1MsS0FBYixDQUFtQkYsTUFBbkIsRUFBMkIsTUFBM0IsRUFBbUM7QUFBQSxxQkFBTUMsWUFBWSxDQUFDLElBQUQsQ0FBbEI7QUFBQSxhQUFuQztBQUNBLFdBRmdCO0FBQUE7QUFEQSxPQUFsQixDQURvQjtBQUFBO0FBRlYsR0FBWixDQUQ4QjtBQUFBLENBQXhCOzs7QUFXQSxJQUFNRSxxQkFBcUIsR0FBR1gsZUFBZSxDQUFDWSxPQUFPLENBQUNDLE1BQVQsQ0FBN0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBAZmxvdyAqL1xuXG5pbXBvcnQgZGFnZ3kgZnJvbSBcImRhZ2d5XCI7XG5cbmltcG9ydCB7IGludGVycHJldGVyLCBzZW5kIH0gZnJvbSBcIi4vZWZmLmpzXCI7XG5cbmNvbnN0IE91dHB1dCA9IGRhZ2d5LnRhZ2dlZFN1bShcIk91dHB1dFwiLCB7XG5cdHB1dFN0cmluZzogW1wic3RyaW5nXCJdLFxufSk7XG5cbmV4cG9ydCBjb25zdCBwdXRTdHJpbmcgPSAoczogc3RyaW5nKSA9PiBzZW5kKE91dHB1dC5wdXRTdHJpbmcocykpO1xuZXhwb3J0IGNvbnN0IHB1dFN0cmluZ0xpbmUgPSAoczogc3RyaW5nKSA9PiBzZW5kKE91dHB1dC5wdXRTdHJpbmcocyArIFwiXFxuXCIpKTtcblxuZXhwb3J0IGNvbnN0IGludGVycHJldE91dHB1dCA9IChvdXRwdXRTdHJlYW06IHN0cmVhbSRXcml0YWJsZSkgPT5cblx0aW50ZXJwcmV0ZXIoe1xuXHRcdHByZWRpY2F0ZTogeCA9PiBPdXRwdXQuaXMoeCksXG5cdFx0aGFuZGxlcjogb3V0cHV0RWZmZWN0ID0+XG5cdFx0XHRvdXRwdXRFZmZlY3QuY2F0YSh7XG5cdFx0XHRcdHB1dFN0cmluZzogc3RyaW5nID0+IGNvbnRpbnVhdGlvbiA9PiB7XG5cdFx0XHRcdFx0b3V0cHV0U3RyZWFtLndyaXRlKHN0cmluZywgXCJ1dGY4XCIsICgpID0+IGNvbnRpbnVhdGlvbihudWxsKSk7XG5cdFx0XHRcdH0sXG5cdFx0XHR9KSxcblx0fSk7XG5cbmV4cG9ydCBjb25zdCBpbnRlcnByZXRPdXRwdXRTdGRPdXQgPSBpbnRlcnByZXRPdXRwdXQocHJvY2Vzcy5zdGRvdXQpO1xuIl19