UNPKG

@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
'use strict'; 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 }); }