@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">
50 lines (35 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.replicate = replicate;
exports.replicateA = replicateA;
exports.none = none;
exports.singleton = singleton;
var _HKT = require('./HKT');
var _Maybe = require('./Maybe');
var maybe = _interopRequireWildcard(_Maybe);
var _Tuple = require('./Tuple');
var _Traversable = require('./Traversable');
var _Fun = require('./Fun');
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; } }
// Replicate a value some natural number of times.
// This class identifies data structures which can be _unfolded_,
// generalizing `unfoldr` on arrays.
function replicate(unfoldable, n, a) {
function step(n) {
return n <= 0 ? maybe.Nothing : maybe.of((0, _Tuple.inj)([a, n - 1]));
}
return unfoldable.unfoldr(step, n);
}
// Perform an Applicative action `n` times, and accumulate all the results.
function replicateA(applicative, unfoldableTraversable, n, ma) {
return (0, _Traversable.sequence)(applicative, unfoldableTraversable, replicate(unfoldableTraversable, n, ma));
}
// The container with no elements - unfolded with zero iterations.
function none(unfoldable) {
return unfoldable.unfoldr((0, _Fun.constant)(maybe.Nothing), undefined);
}
function singleton(unfoldable, a) {
return replicate(unfoldable, 1, a);
}