@dillonkearns/elm-graphql
Version:
<img src="https://cdn.jsdelivr.net/gh/martimatix/logo-graphqelm/logo.svg" alt="dillonearns/elm-graphql logo" width="40%" align="right">
59 lines (47 loc) • 1.55 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.modify = modify;
exports.createSSAB = createSSAB;
exports.asOptional = asOptional;
exports.composePrism = composePrism;
var _Either = require('./Either');
var either = _interopRequireWildcard(_Either);
var _Maybe = require('./Maybe');
var maybe = _interopRequireWildcard(_Maybe);
var _Identity = require('./Identity');
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function modify(stab, f, s) {
return either.either(_Identity.id, function (a) {
return stab.reverseGet(f(a));
}, stab.getOrModify(s));
}
function createSSAB(getOption, reverseGet) {
return {
getOrModify: function getOrModify(s) {
return maybe.maybe(either.left(s), either.right, getOption(s));
},
reverseGet: reverseGet
};
}
function asOptional(prism) {
return {
getOrModify: prism.getOrModify,
set: function set(b) {
return prism.reverseGet(b);
}
};
}
function composePrism(abcd, stab) {
return {
getOrModify: function getOrModify(s) {
return either.chain(function (a) {
return either.bimap(stab.reverseGet, _Identity.id, abcd.getOrModify(a));
}, stab.getOrModify(s));
},
reverseGet: function reverseGet(d) {
return stab.reverseGet(abcd.reverseGet(d));
}
};
}