parser-ts
Version:
String parser combinators for TypeScript
81 lines (80 loc) • 2.48 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
/**
* @since 0.6.0
*/
import { getMonoid } from 'fp-ts/es6/Array';
import { left, right } from 'fp-ts/es6/Either';
import { first, last, struct } from 'fp-ts/es6/Semigroup';
// -------------------------------------------------------------------------------------
// constructors
// -------------------------------------------------------------------------------------
/**
* @category constructors
* @since 0.6.0
*/
export var success = function (value, next, start) {
return right({
value: value,
next: next,
start: start
});
};
/**
* @category constructors
* @since 0.6.0
*/
export var error = function (input, expected, fatal) {
if (expected === void 0) { expected = []; }
if (fatal === void 0) { fatal = false; }
return left({
input: input,
expected: expected,
fatal: fatal
});
};
// -------------------------------------------------------------------------------------
// combinators
// -------------------------------------------------------------------------------------
/**
* @category combinators
* @since 0.6.0
*/
export var withExpected = function (err, expected) { return (__assign(__assign({}, err), { expected: expected })); };
/**
* @category combinators
* @since 0.6.0
*/
export var escalate = function (err) { return (__assign(__assign({}, err), { fatal: true })); };
/**
* @category combinators
* @since 0.6.0
*/
export var extend = function (err1, err2) {
return getSemigroup().concat(err1, err2);
};
// -------------------------------------------------------------------------------------
// instances
// -------------------------------------------------------------------------------------
var getSemigroup = function () { return ({
concat: function (x, y) {
if (x.input.cursor < y.input.cursor)
return last().concat(x, y);
if (x.input.cursor > y.input.cursor)
return first().concat(x, y);
return struct({
input: first(),
fatal: first(),
expected: getMonoid()
}).concat(x, y);
}
}); };