@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">
112 lines (91 loc) • 2.17 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.inj = inj;
exports.prj = prj;
exports.get = get;
exports.put = put;
exports.modify = modify;
exports.gets = gets;
exports.runState = runState;
exports.evalState = evalState;
exports.execState = execState;
exports.map = map;
exports.ap = ap;
exports.of = of;
exports.chain = chain;
var _HKT = require('./HKT');
var _Tuple = require('./Tuple');
var tuple = _interopRequireWildcard(_Tuple);
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 _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var IsState = function IsState() {
_classCallCheck(this, IsState);
};
function inj(a) {
return a;
}
function prj(fa) {
return fa;
}
function get() {
return inj(function (s) {
return tuple.inj([s, s]);
});
}
function put(s) {
return inj(function () {
return tuple.inj([undefined, s]);
});
}
function modify(f) {
return inj(function (s) {
return tuple.inj([undefined, f(s)]);
});
}
function gets(f) {
return chain(function (s) {
return of(f(s));
}, get());
}
function runState(sa, s) {
return prj(sa)(s);
}
function evalState(sa, s) {
return tuple.fst(runState(sa, s));
}
function execState(sa, s) {
return tuple.snd(runState(sa, s));
}
function map(f, fa) {
return inj(function (s) {
var t = runState(fa, s);
return tuple.inj([f(tuple.fst(t)), tuple.snd(t)]);
});
}
function ap(fab, fa) {
return chain(function (f) {
return map(f, fa);
}, fab); // <= derived
}
function of(a) {
return inj(function (s) {
return tuple.inj([a, s]);
});
}
function chain(f, fa) {
return inj(function (s) {
var t = runState(fa, s);
return runState(f(tuple.fst(t)), tuple.snd(t));
});
}
if (false) {
// eslint-disable-line
({
map: map,
ap: ap,
of: of,
chain: chain
});
}