stick-js
Version:
Fast toolkit for functional programming in JS. Provides idioms for referentially transparent expressions, clear separation of mutable and immutable operations, object factories, function calls based on English grammar, and pipe & compose operators.
249 lines (242 loc) • 59.2 kB
JavaScript
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.gt=exports.getType=exports.flip5=exports.flip4=exports.flip3=exports.flip=exports.findWithIndex=exports.findIndex=exports.find=exports.filter=exports.factoryProps=exports.factoryInit=exports.exception=exports.eq=exports.eachObjIn=exports.eachObj=exports.each=exports.drop=exports.dotN=exports.dot5=exports.dot4=exports.dot3=exports.dot2=exports.dot1=exports.dot=exports.divideInto=exports.divideBy=exports.die=exports.defaultTo=exports.deconstructN=exports.deconstruct2=exports.deconstruct=exports.containsV=exports.contains=exports.condS=exports.condPredicateDiscard=exports.condPredicate=exports.cond=exports.concatToM=exports.concatTo=exports.concatM=exports.concat=exports.composeRight=exports.composeAsMethodsRight=exports.composeAsMethods=exports.compose=exports.callOnN=exports.callOn5=exports.callOn4=exports.callOn3=exports.callOn2=exports.callOn1=exports.callOn=exports.bindTryTo=exports.bindTryPropTo=exports.bindTryProp=exports.bindTry=exports.bindTo=exports.bindPropTo=exports.bindProp=exports.bindLatePropTo=exports.bindLateProp=exports.bind=exports.asteriskN=exports.asterisk5=exports.asterisk4=exports.asterisk3=exports.asterisk2=exports.asterisk1=exports.assocPathM=exports.assocPath=exports.assocM=exports.assoc=exports.applyToN=exports.applyTo5=exports.applyTo4=exports.applyTo3=exports.applyTo2=exports.applyTo1=exports.appendToM=exports.appendTo=exports.appendM=exports.append=exports.anyAgainst=exports.andNot=exports.and=exports.ampersandN=exports.always=exports.allAgainst=exports.againstEither=exports.againstBoth=exports.againstAny=exports.againstAll=exports.addIndex2=exports.addIndex=exports.addCollection2=exports.addCollection=exports.add=exports.T=exports.F=void 0;exports.provideTo1=exports.provideTo=exports.propOf=exports.prop=exports.prependToM=exports.prependTo=exports.prependM=exports.prepend=exports.pipe=exports.pathOf=exports.path=exports.passToN=exports.passTo=exports.orNot=exports.or=exports.ok=exports.notOk=exports.not=exports.noop=exports.neuN=exports.neu5=exports.neu4=exports.neu3=exports.neu2=exports.neu1=exports.ne=exports.multiply=exports.moduloWholePart=exports.modulo=exports.mixinPreNM=exports.mixinPreM=exports.mixinNM=exports.mixinM=exports.mergeWith=exports.mergeWhen=exports.mergeToSym=exports.mergeToMSym=exports.mergeToM=exports.mergeTo=exports.mergeSym=exports.mergeMSym=exports.mergeM=exports.mergeInToSym=exports.mergeInToMSym=exports.mergeInToM=exports.mergeInTo=exports.mergeInSym=exports.mergeInMSym=exports.mergeInM=exports.mergeIn=exports.mergeAllIn=exports.merge=exports.match=exports.map=exports.lte=exports.lt=exports.lets6=exports.lets5=exports.lets4=exports.lets3=exports.lets2=exports.lets1=exports.lets=exports.letV=exports.letS=exports.letNV=exports.letN=exports.join=exports.isYes=exports.isType=exports.isTrue=exports.isSymbol=exports.isString=exports.isSet=exports.isRegExp=exports.isObject=exports.isNumber=exports.isNo=exports.isMap=exports.isFunction=exports.isFalse=exports.isDate=exports.isBoolean=exports.isArray=exports.invoke=exports.ifXReplaceStrFlags=exports.ifXReplaceStr=exports.ifXReplace=exports.ifReplace=exports.ifPredicateWithResults=exports.ifPredicateV=exports.ifPredicateResults=exports.ifPredicate=exports.ifHasIn=exports.ifHas=exports.ifBind=exports.ifAlways=exports.hasIn=exports.has=exports.gte=void 0;exports.xReplaceStrFlags=exports.xReplaceStr=exports.xReplace=exports.xRegExpStr=exports.xRegExpFlags=exports.xRegExp=exports.xMatchStrFlags=exports.xMatchStr=exports.xMatchGlobal=exports.xMatch=exports.whenPredicateWithResults=exports.whenPredicateV=exports.whenPredicateResults=exports.whenPredicate=exports.whenHasIn=exports.whenHas=exports.whenBind=exports.whenAlways=exports.updatePathM=exports.updatePath=exports.updateM=exports.update=exports.tryCatch=exports.toThe=exports.timesV=exports.timesSide=exports.timesF=exports.tap=exports.take=exports.subtractFrom=exports.subtract=exports.sprintfN=exports.sprintf1=exports.spreadTo=exports.split=exports.sideN=exports.side5=exports.side4=exports.side3=exports.side2=exports.side1=exports.side=exports.repeatV=exports.repeatSide=exports.repeatF=exports.reject=exports.reduceRightC=exports.reduceRight=exports.reduceObjIn=exports.reduceObj=exports.reduceAbort=exports.reduce=exports.rangeToBy=exports.rangeFromByDesc=exports.rangeFromByAsc=exports.rangeFromBy=exports.raise=exports.provideToN=exports.provideTo5=exports.provideTo4=exports.provideTo3=exports.provideTo2=void 0;var _construct2=_interopRequireDefault(require("@babel/runtime/helpers/construct"));var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _toConsumableArray2=_interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));var _sprintfJs=_interopRequireDefault(require("sprintf-js"));var _internal=require("./internal.js");function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable;})),t.push.apply(t,o);}return t;}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){(0,_defineProperty2.default)(e,r,t[r]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r));});}return e;}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]};},e:function e(r){throw r;},f:F};}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a=!0,u=!1;return{s:function s(){t=t.call(r);},n:function n(){var r=t.next();return a=r.done,r;},e:function e(r){u=!0,o=r;},f:function f(){try{a||null==t.return||t.return();}finally{if(u)throw o;}}};}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0;}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n;}/* As a general guideline we try to keep the functions here as fast as possible, even at the cost of code duplication.
*/var sprintf=_sprintfJs.default.sprintf;// --- @future curry these?
var pipe=exports.pipe=function pipe(a,b){return b(a);};var composeRight=exports.composeRight=function composeRight(a,b){return function(){return b(a.apply(void 0,arguments));};};var compose=exports.compose=function compose(a,b){return function(){return a(b.apply(void 0,arguments));};};// --- @experimental
var composeAsMethodsRight=exports.composeAsMethodsRight=function composeAsMethodsRight(b,a){return a.compose(b);};var composeAsMethods=exports.composeAsMethods=function composeAsMethods(a,b){return a.compose(b);};var noop=exports.noop=function noop(){};var not=exports.not=function not(x){return!x;};var ok=exports.ok=function ok(x){return x!=null;};var notOk=exports.notOk=function notOk(x){return x==null;};var always=exports.always=function always(x){return function(_){return x;};};var eq=exports.eq=function eq(x){return function(y){return x===y;};};var ne=exports.ne=function ne(x){return function(y){return x!==y;};};var gt=exports.gt=function gt(m){return function(n){return n>m;};};var gte=exports.gte=function gte(m){return function(n){return n>=m;};};var lt=exports.lt=function lt(m){return function(n){return n<m;};};var lte=exports.lte=function lte(m){return function(n){return n<=m;};};/* Matches on exactly `true` or `false`
*/var isTrue=exports.isTrue=eq(true);var isFalse=exports.isFalse=eq(false);var ifPredicate=exports.ifPredicate=function ifPredicate(p){return function(yes){return function(no){return function(x){return p(x)?yes(x):no(x);};};};};var whenPredicate=exports.whenPredicate=function whenPredicate(p){return function(yes){return ifPredicate(p)(yes)(noop);};};var ifPredicateV=exports.ifPredicateV=function ifPredicateV(p){return function(yes){return function(no){return function(x){return p(x)?yes:no;};};};};var whenPredicateV=exports.whenPredicateV=function whenPredicateV(p){return function(yes){return ifPredicateV(p)(yes)(void 8);};};/* These are like `ifPredicate`/`whenPredicate`, but pass the result of the predicate test to the
* condition functions.
*/var ifPredicateResults=exports.ifPredicateResults=function ifPredicateResults(p){return function(yes){return function(no){return function(x){var y=p(x);return y?yes(y):no(y);};};};};var whenPredicateResults=exports.whenPredicateResults=function whenPredicateResults(p){return function(yes){return ifPredicateResults(p)(yes)(noop);};};/* These are like `ifPredicate`/`whenPredicate`, but pass both `x` and the result of the predicate
* test to the condition functions.
*/var ifPredicateWithResults=exports.ifPredicateWithResults=function ifPredicateWithResults(p){return function(yes){return function(no){return function(x){var y=p(x);return y?yes(x,y):no(x,y);};};};};var whenPredicateWithResults=exports.whenPredicateWithResults=function whenPredicateWithResults(p){return function(yes){return ifPredicateWithResults(p)(yes)(noop);};};/*
* An anaphoric if which branches on a constant condition. The piped argument is ignored when
* deciding the condition, but is passed to the branching functions.
*
* Usage:
* res | ifAlways (someConstantCondition) (
res => yes ...
res => no ...
)
*
* This is less lazy in its evaluation of the condition than the normal if/whenPredicate functions. To retain the laziness, use if/whenPredicate, and ignore the argument:
*
* res | ifPredicate (() => someConstantCondition) (...)
*
* Derivation:
* const isAlways = x => _ => x
* const ifAlways = x => isAlways (x) | ifPredicate
* const isAlways = always
* const ifAlways = x => always (x) | ifPredicate
* const ifAlways = always >> ifPredicate
*/var ifAlways=exports.ifAlways=composeRight(always,ifPredicate);var whenAlways=exports.whenAlways=composeRight(always,whenPredicate);/* Truthy / falsey */var isYes=exports.isYes=Boolean;var isNo=exports.isNo=not;// --- @future whenNil, ifNil
// ------ types.
var getType=exports.getType=function getType(x){return _internal.oStr.call(x).slice(8,-1);};var isType=exports.isType=function isType(t){return function(x){return getType(x)===t;};};// --- Proxy counts as a function (it's how lodash does it).
var isFunction=exports.isFunction=function isFunction(o){var type=getType(o);return false||type==='Function'||type==='GeneratorFunction'||type==='AsyncFunction'||type==='Proxy';};var isArray=exports.isArray=/*#__PURE__*/isType('Array');var isObject=exports.isObject=/*#__PURE__*/isType('Object');var isNumber=exports.isNumber=/*#__PURE__*/isType('Number');var isRegExp=exports.isRegExp=/*#__PURE__*/isType('RegExp');var isBoolean=exports.isBoolean=/*#__PURE__*/isType('Boolean');var isString=exports.isString=/*#__PURE__*/isType('String');var isSymbol=exports.isSymbol=/*#__PURE__*/isType('Symbol');var isDate=exports.isDate=/*#__PURE__*/isType('Date');var isSet=exports.isSet=/*#__PURE__*/isType('Set');var isMap=exports.isMap=/*#__PURE__*/isType('Map');var tap=exports.tap=function tap(f){return function(o){return f(o),o;};};var dot=exports.dot=function dot(prop){return function(o){return o[prop]();};};var dot1=exports.dot1=function dot1(prop){return function(val){return function(o){return o[prop](val);};};};var dot2=exports.dot2=function dot2(prop){return function(val1){return function(val2){return function(o){return o[prop](val1,val2);};};};};var dot3=exports.dot3=function dot3(prop){return function(val1){return function(val2){return function(val3){return function(o){return o[prop](val1,val2,val3);};};};};};var dot4=exports.dot4=function dot4(prop){return function(val1){return function(val2){return function(val3){return function(val4){return function(o){return o[prop](val1,val2,val3,val4);};};};};};};var dot5=exports.dot5=function dot5(prop){return function(val1){return function(val2){return function(val3){return function(val4){return function(val5){return function(o){return o[prop](val1,val2,val3,val4,val5);};};};};};};};var dotN=exports.dotN=function dotN(prop){return function(vs){return function(o){return o[prop].apply(o,(0,_toConsumableArray2.default)(vs));};};};var side=exports.side=function side(prop){return function(o){return dot(prop)(o),o;};};var side1=exports.side1=function side1(prop){return function(val1){return function(o){return dot1(prop)(val1)(o),o;};};};var side2=exports.side2=function side2(prop){return function(val1){return function(val2){return function(o){return dot2(prop)(val1)(val2)(o),o;};};};};var side3=exports.side3=function side3(prop){return function(val1){return function(val2){return function(val3){return function(o){return dot3(prop)(val1)(val2)(val3)(o),o;};};};};};var side4=exports.side4=function side4(prop){return function(val1){return function(val2){return function(val3){return function(val4){return function(o){return dot4(prop)(val1)(val2)(val3)(val4)(o),o;};};};};};};var side5=exports.side5=function side5(prop){return function(val1){return function(val2){return function(val3){return function(val4){return function(val5){return function(o){return dot5(prop)(val1)(val2)(val3)(val4)(val5)(o),o;};};};};};};};var sideN=exports.sideN=function sideN(prop){return function(vs){return function(o){return dotN(prop)(vs)(o),o;};};};// --- @future reversed version of `has.
/* These all ignore symbol keys. */var has=exports.has=function has(k){return function(o){return _internal.hasOwnProperty.call(o,k);};};var hasIn=exports.hasIn=function hasIn(k){return function(o){return k in o;};};var ifHas=exports.ifHas=function ifHas(yes){return function(no){return function(_ref){var _ref2=(0,_slicedToArray2.default)(_ref,2),o=_ref2[0],k=_ref2[1];return has(k)(o)?yes(o[k],o,k):no(o,k);};};};var whenHas=exports.whenHas=function whenHas(yes){return ifHas(yes)(noop);};var ifHasIn=exports.ifHasIn=function ifHasIn(yes){return function(no){return function(_ref3){var _ref4=(0,_slicedToArray2.default)(_ref3,2),o=_ref4[0],k=_ref4[1];return hasIn(k)(o)?yes(o[k],o,k):no(o,k);};};};var whenHasIn=exports.whenHasIn=function whenHasIn(yes){return ifHasIn(yes)(noop);};var bindLatePropTo=exports.bindLatePropTo=function bindLatePropTo(o){return function(prop){return function(){return o[prop].apply(o,arguments);};};};var bindLateProp=exports.bindLateProp=function bindLateProp(prop){return function(o){return function(){return o[prop].apply(o,arguments);};};};var bindPropTo=exports.bindPropTo=function bindPropTo(o){return function(prop){return o[prop].bind(o);};};var bindProp=exports.bindProp=function bindProp(prop){return function(o){return o[prop].bind(o);};};var bindTo=exports.bindTo=function bindTo(o){return function(f){return f.bind(o);};};var bind=exports.bind=function bind(f){return function(o){return f.bind(o);};};// --- bindTry* returns `null` if o[prop] is not a function.
var bindTryPropTo=exports.bindTryPropTo=function bindTryPropTo(o){return function(prop){return typeof o[prop]==='function'?bindPropTo(o)(prop):null;};};var bindTryProp=exports.bindTryProp=function bindTryProp(prop){return function(o){return typeof o[prop]==='function'?bindPropTo(o)(prop):null;};};var bindTryTo=exports.bindTryTo=function bindTryTo(o){return function(f){return typeof f==='function'?bindTo(o)(f):null;};};var bindTry=exports.bindTry=function bindTry(f){return function(o){return typeof f==='function'?bindTo(o)(f):null;};};// --- @experimental
// --- @todo this is not that nice to use.
// --- trier is e.g. `bindTryPropTo`
var ifBind=exports.ifBind=function ifBind(trier){return ifPredicateWithResults(passToN(trier));};var whenBind=exports.whenBind=function whenBind(trier){return function(yes){return ifBind(trier)(yes)(noop);};};/* Usage
* cond (
* [_ => 3 == 4, _ => 'twilight zone'],
* [_ => 3 == 5, _ => 'even stranger'],
* [T, _ => 'ok'],
* )
*
* or with a native idiom:
*
* cond (
* (_ => 3 == 4) | guard (_ => 'twilight zone'),
* (_ => 3 == 5) | guard (_ => 'even stranger'),
* otherwise | guard (_ => 'ok'),
* )
*
* `guardV` is a convenience for a guard which returns a simple expression, so guard (_ => 'twilight zone')
* could be replaced by guardV ('twilight zone')
*
* The advantage of the left side being functions is that they are late-evaluated, they stop as soon
* as one matches, and they can interact with a piped argument (see `condS` below.
*
* If you want simple, eager constant conditions on the left, just use a table :)
*
*/var T=exports.T=always(true);var F=exports.F=always(false);var condPredicate=exports.condPredicate=function condPredicate(exec){return function(pred){return[pred,exec];};};var condPredicateDiscard=exports.condPredicateDiscard=function condPredicateDiscard(exec){return function(pred){return[pred,function(target,_result){return exec(target);}];};};/*
* Tests on truthiness, not strict equality.
* This is how `if` works, it's how `cond` works in Ramda, and it's trivial to convert truthy to
* strict.
*/var cond=exports.cond=function cond(){for(var _len=arguments.length,blocks=new Array(_len),_key=0;_key<_len;_key++){blocks[_key]=arguments[_key];}for(var _i=0,_blocks=blocks;_i<_blocks.length;_i++){var _blocks$_i=(0,_slicedToArray2.default)(_blocks[_i],2),test=_blocks$_i[0],exec=_blocks$_i[1];var result=test();if(result)return exec(result);}};var condS=exports.condS=function condS(blocks){return function(target){var _iterator=_createForOfIteratorHelper(blocks),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var _step$value=(0,_slicedToArray2.default)(_step.value,2),test=_step$value[0],exec=_step$value[1];var result=test(target);if(result)return exec(target,result);}}catch(err){_iterator.e(err);}finally{_iterator.f();}};};var add=exports.add=function add(m){return function(n){return m+n;};};var multiply=exports.multiply=function multiply(m){return function(n){return m*n;};};var divideBy=exports.divideBy=function divideBy(m){return function(n){return n/m;};};var divideInto=exports.divideInto=function divideInto(m){return function(n){return m/n;};};var subtract=exports.subtract=function subtract(m){return function(n){return n-m;};};var subtractFrom=exports.subtractFrom=function subtractFrom(m){return function(n){return m-n;};};var modulo=exports.modulo=function modulo(m){return function(n){return n%m;};};var moduloWholePart=exports.moduloWholePart=function moduloWholePart(m){return function(n){var div=n/m;var flo=Math.floor(div);return div<0?1+flo:flo;};};var toThe=exports.toThe=function toThe(e){return function(b){return Math.pow(b,e);};};// ------ exceptions
// --- @todo consider adding tryCatchS:
// const tryCatchS = (good) => (bad) => (f) => (v) => {
// ... successVal = f (v)
// }
var tryCatch=exports.tryCatch=function tryCatch(good){return function(bad){return function(f){// @todo simplify: try { return good (f ()) }
var successVal;try{successVal=f();}catch(e){return bad(e);}return good(successVal);};};};/* Despite the name, `die` simply throws an exception, which can of course be caught.
* (It shouldn't be too surprising to JS users that it doesn't really 'die', i.e. halt the runtime.)
*/var exception=exports.exception=function exception(){for(var _len2=arguments.length,args=new Array(_len2),_key2=0;_key2<_len2;_key2++){args[_key2]=arguments[_key2];}return new Error(args.join(' '));};var raise=exports.raise=function raise(e){throw e;};var die=exports.die=composeRight(exception,raise);var defaultTo=exports.defaultTo=function defaultTo(f){return function(x){return ok(x)?x:f();};};// ------ object stuff.
var prop=exports.prop=function prop(p){return function(o){return o[p];};};var propOf=exports.propOf=function propOf(o){return function(p){return o[p];};};var path=exports.path=function path(xs){return function(o){var j=o;var _iterator2=_createForOfIteratorHelper(xs),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var i=_step2.value;if(!ok(j))return j;else j=j[i];}}catch(err){_iterator2.e(err);}finally{_iterator2.f();}return j;};};var pathOf=exports.pathOf=function pathOf(o){return function(xs){return path(xs)(o);};};// --- @todo update and assoc convert array input to an object unfortunately (due to the merge step).
var assoc=exports.assoc=function assoc(prop){return function(val){return function(o){var oo=mergeInM(o)((0,_internal.safeObject)());oo[prop]=val;return oo;};};};var assocM=exports.assocM=function assocM(prop){return function(val){return function(o){return o[prop]=val,o;};};};var assocPath=exports.assocPath=function assocPath(xs){return function(x){return function(o){return assocPathM(xs)(x)(mergeInM(o)((0,_internal.safeObject)()));};};};var assocPathM=exports.assocPathM=function assocPathM(xs){return function(x){return function(o){var reducer=function reducer(ptr,pat,el){if(!ok(pat))return[ptr,el];var pp=ptr[pat];var ppp=isArray(pp)||isObject(pp)?pp:ptr[pat]=(0,_internal.safeObject)();return[ppp,el];};var _xs$reduce=xs.reduce(function(_ref5,x){var _ref6=(0,_slicedToArray2.default)(_ref5,2),p=_ref6[0],s=_ref6[1];return reducer(p,s,x);},[o,null]),_xs$reduce2=(0,_slicedToArray2.default)(_xs$reduce,2),ptr=_xs$reduce2[0],pat=_xs$reduce2[1];ptr[pat]=x;return o;};};};/* These always flatten the prototypes, like `assoc`. */var updateM=exports.updateM=function updateM(prop){return function(f){return function(o){return o[prop]=f(o[prop]),o;};};};var update=exports.update=function update(prop){return function(f){return function(o){var oo=merge(o)((0,_internal.safeObject)());oo[prop]=f(o[prop]);return oo;};};};/* These are not separately unit tested because they route through `assocPath/M`, which are. */var updatePathM=exports.updatePathM=function updatePathM(xs){return function(f){return function(o){var x=path(xs)(o);return assocPathM(xs)(f(x))(o);};};};var updatePath=exports.updatePath=function updatePath(xs){return function(f){return function(o){var x=path(xs)(o);return assocPath(xs)(f(x))(o);};};};var append=exports.append=function append(elem){return function(ary){return[].concat((0,_toConsumableArray2.default)(ary),[elem]);};};var appendTo=exports.appendTo=function appendTo(ary){return function(elem){return[].concat((0,_toConsumableArray2.default)(ary),[elem]);};};var appendToM=exports.appendToM=function appendToM(tgt){return function(src){return tgt.push(src),tgt;};};var appendM=exports.appendM=function appendM(src){return function(tgt){return tgt.push(src),tgt;};};var prependTo=exports.prependTo=function prependTo(ary){return function(elem){return[elem].concat((0,_toConsumableArray2.default)(ary));};};var prepend=exports.prepend=function prepend(elem){return function(ary){return[elem].concat((0,_toConsumableArray2.default)(ary));};};var prependM=exports.prependM=function prependM(src){return function(tgt){return tgt.unshift(src),tgt;};};var prependToM=exports.prependToM=function prependToM(tgt){return function(src){return tgt.unshift(src),tgt;};};var concatTo=exports.concatTo=function concatTo(tgt){return function(src){return tgt.concat(src);};};var concat=exports.concat=function concat(src){return function(tgt){return tgt.concat(src);};};/* Note: these only work for arrays, not strings (strings are always immutable in JS)
*/var concatToM=exports.concatToM=function concatToM(tgt){return function(src){return tgt.push.apply(tgt,(0,_toConsumableArray2.default)(src)),tgt;};};var concatM=exports.concatM=function concatM(src){return function(tgt){return tgt.push.apply(tgt,(0,_toConsumableArray2.default)(src)),tgt;};};// --- @todo these seem to be much faster than Object.assign, check.
var mergeToM=exports.mergeToM=function mergeToM(tgt){return function(src){var _iterator3=_createForOfIteratorHelper(Reflect.ownKeys(src)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var i=_step3.value;tgt[i]=src[i];}}catch(err){_iterator3.e(err);}finally{_iterator3.f();}return tgt;};};var mergeM=exports.mergeM=function mergeM(src){return function(tgt){var _iterator4=_createForOfIteratorHelper(Reflect.ownKeys(src)),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var i=_step4.value;tgt[i]=src[i];}}catch(err){_iterator4.e(err);}finally{_iterator4.f();}return tgt;};};var mergeTo=exports.mergeTo=function mergeTo(tgt){return function(src){var a=mergeToM((0,_internal.safeObject)())(tgt);return mergeToM(a)(src);};};var merge=exports.merge=function merge(src){return function(tgt){var a=mergeToM((0,_internal.safeObject)())(tgt);return mergeToM(a)(src);};};/* The 'in' variants ignore all symbol keys.
*/var mergeInToM=exports.mergeInToM=function mergeInToM(tgt){return function(src){for(var i in src)tgt[i]=src[i];return tgt;};};var mergeInM=exports.mergeInM=function mergeInM(src){return function(tgt){return mergeInToM(tgt)(src);};};var mergeInTo=exports.mergeInTo=function mergeInTo(tgt){return function(src){var a=mergeInToM((0,_internal.safeObject)())(tgt);return mergeInToM(a)(src);};};var mergeIn=exports.mergeIn=function mergeIn(src){return function(tgt){return mergeInTo(tgt)(src);};};var getMergeX=function getMergeX(pluck){return function(mergerSym){return ifPredicate(ok)(pluck)(function(_){return die(sprintf('No merge function for symbol "%s"'));})(merges()[mergerSym]);};};// --- throw on failure.
var getMergeFunction=getMergeX(function(_ref7){var f=_ref7.f;return f;});var getMergeInfo=getMergeX(function(_ref8){var to=_ref8.to,mut=_ref8.mut,own=_ref8.own;return{to:to,mut:mut,own:own};});var mergeToMSym=exports.mergeToMSym=Symbol('mergeToM');var mergeToSym=exports.mergeToSym=Symbol('mergeTo');var mergeMSym=exports.mergeMSym=Symbol('mergeM');var mergeSym=exports.mergeSym=Symbol('merge');var mergeInToMSym=exports.mergeInToMSym=Symbol('mergeInToM');var mergeInToSym=exports.mergeInToSym=Symbol('mergeInTo');var mergeInMSym=exports.mergeInMSym=Symbol('mergeInM');var mergeInSym=exports.mergeInSym=Symbol('mergeIn');// --- like R.mergeAll but also use prototype vals.
// --- to and from not applicable, also not curried or meant to be used piped.
var mergeAllIn=exports.mergeAllIn=function mergeAllIn(xs){return xs.reduce(function(tgt,src){return mergeInToM(tgt)(src);},(0,_internal.safeObject)());};var merges=function merges(_){return(0,_defineProperty2.default)((0,_defineProperty2.default)((0,_defineProperty2.default)((0,_defineProperty2.default)((0,_defineProperty2.default)((0,_defineProperty2.default)((0,_defineProperty2.default)((0,_defineProperty2.default)({},mergeToMSym,{f:mergeToM,to:true,mut:true,own:true}),mergeToSym,{f:mergeTo,to:true,mut:false,own:true}),mergeMSym,{f:mergeM,to:false,mut:true,own:true}),mergeSym,{f:merge,to:false,mut:false,own:true}),mergeInToMSym,{f:mergeInToM,to:true,mut:true,own:false}),mergeInToSym,{f:mergeInTo,to:true,mut:false,own:false}),mergeInMSym,{f:mergeInM,to:false,mut:true,own:false}),mergeInSym,{f:mergeIn,to:false,mut:false,own:false});};// --- tgt will be altered.
// only `own` needs to be passed: direction and mutability have already been decided.
//
// in the M case tgt is just the tgt;
// in the non-M case it has been prepared to be a new copy.
//
// `own` refers to both tgt & src -- not possible to mix and match.
// --- a performance hit is acceptable here.
var mergeXWith=function mergeXWith(collision){return function(own){return function(src){return function(tgt){var _ref10=own?[whenHas,ifHas]:[whenHasIn,ifHasIn],_ref11=(0,_slicedToArray2.default)(_ref10,2),_whenHas=_ref11[0],_ifHas=_ref11[1];var doKey=function doKey(key){return _whenHas(function(v,o,k){return _ifHas(function(v,o,k){return tgt[key]=collision(src[key],tgt[key]);})(function(o,k){return tgt[key]=src[key];})([tgt,key]);})([src,key]);};for(var key in src)doKey(key);// --- for non-own we ignore all symbol keys.
if(own){var _iterator5=_createForOfIteratorHelper(Object.getOwnPropertySymbols(src)),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var _key3=_step5.value;doKey(_key3);}}catch(err){_iterator5.e(err);}finally{_iterator5.f();}}return tgt;};};};};var mergeWith=exports.mergeWith=function mergeWith(collision){return function(mergerSym){// --- fail early instead of continuing with curry (throws)
var merger=getMergeFunction(mergerSym);return function(a){return function(b){var _getMergeInfo=getMergeInfo(mergerSym),to=_getMergeInfo.to,mut=_getMergeInfo.mut,own=_getMergeInfo.own;var _ref12=to?[b,a]:[a,b],_ref13=(0,_slicedToArray2.default)(_ref12,2),src=_ref13[0],tgt=_ref13[1];var tgtM=mut?tgt:to?merger((0,_internal.safeObject)())(tgt):merger(tgt)((0,_internal.safeObject)());return mergeXWith(collision)(own)(src)(tgtM);};};};};// --- like with 'with', mut and direction have already been arranged, and `tgt` will be mutated.
// --- tests `p` for truthiness.
var mergeXWhen=function mergeXWhen(p){return function(own){return function(src){return function(tgt){var f=function f(key){if(p(src[key],tgt[key]))tgt[key]=src[key];};if(own){var _iterator6=_createForOfIteratorHelper(Reflect.ownKeys(src)),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var i=_step6.value;f(i);}}catch(err){_iterator6.e(err);}finally{_iterator6.f();}}else for(var _i2 in src)f(_i2);return tgt;};};};};// @todo mergeXWhen and mergeXWith should be one function => simpler
var mergeWhen=exports.mergeWhen=function mergeWhen(p){return function(mergerSym){// --- fail early instead of continuing with curry (throws)
var merger=getMergeFunction(mergerSym);return function(a){return function(b){var _getMergeInfo2=getMergeInfo(mergerSym),to=_getMergeInfo2.to,mut=_getMergeInfo2.mut,own=_getMergeInfo2.own;var _ref14=to?[b,a]:[a,b],_ref15=(0,_slicedToArray2.default)(_ref14,2),src=_ref15[0],tgt=_ref15[1];var tgtM=mut?tgt:to?merger((0,_internal.safeObject)())(tgt):merger(tgt)((0,_internal.safeObject)());return mergeXWhen(p)(own)(src)(tgtM);};};};};/* The following functions dispatch to the object's prototype method: `map`, `reduce`,
* `reduceRight`, `find`, `filter`, `reject`.
*
* 'Capped' below refers to the `f` or `p` functions, not to the prototype function (e.g. `map`
* itself).
*
* 'capped at 1' means the function will be called with exactly 1 argument.
*//* `f` is capped at 1.
*/var map=exports.map=function map(f){return function(xs){return xs.map(function(x){return f(x);});};};var each=exports.each=function each(f){return function(xs){return xs.forEach(function(x){return f(x);});};};/* `f` is capped at 2.
* dispatches to `xs.reduce`
*/var reduce=exports.reduce=function reduce(f){return function(acc){return function(xs){return xs.reduce(function(acc,x){return f(acc,x);},acc);};};};/* `f` is capped at 2.
*
* Does not dispatch to `xs.reduceRight`. Also, the order of `acc` and `f` within the reducer is reversed with respect to
* `xs.reduceRight`, but is the familiar order from Haskell.
*
*/var reduceRight=exports.reduceRight=function reduceRight(f){return function(acc){return function(xs){var acco=acc;var l=xs.length;if(l===0)return acco;for(var i=l-1;i>=0;i-=1)acco=f(xs[i],acco);return acco;};};};/* Like `reduceRight`, but assumes `f` is curried.
*
* This allows you to write `f` in a more point-free way in certain cases, by omitting the accumulator.
*
* For example, a function which multiplies each element by 2 and reverses the list:
*
* const reverseDouble = reduceRight (
* (x, acc) => {
* const clone = [... acc]
* clone.push (x * 2)
* return clone
* },
* [],
* )
*
* can be written as
*
* const reverseDouble = reduceRight (
* (x, acc) => acc | append (x * 2),
* [],
* )
*
* Then, using `reduceRightC`:
*
* const reverseDouble = reduceRightC (
* x => acc => acc | append (x * 2),
* [],
* )
*
* And finally:
*
* const reverseDouble = reduceRightC (
* x => append (x * 2),
* [],
* )
*
* And if you want to go further:
*
* const reverseDouble = reduceRightC (
* multiply (2) >> append,
* [],
* )
*
* Note: does not work with addIndex/addCollection (will need separate 'C' versions of those).
*/var reduceRightC=exports.reduceRightC=function reduceRightC(f){return function(accInit){return function(xs){var acc=accInit;var l=xs.length;if(l===0)return acc;for(var i=l-1;i>=0;i-=1)acc=f(xs[i])(acc);return acc;};};};/* `p` is capped at 1.
*
* Note that it's not possible to search for `undefined` in a list using this function. If you
* really need this, consider `findIndex` or `contains`/`containsV`.
*/var find=exports.find=function find(p){return function(xs){return xs.find(function(x){return p(x);});};};var findIndex=exports.findIndex=function findIndex(p){return function(xs){var i=0;var _iterator7=_createForOfIteratorHelper(xs),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var x=_step7.value;if(p(x))return i;i++;}}catch(err){_iterator7.e(err);}finally{_iterator7.f();}return undefined;};};var findWithIndex=exports.findWithIndex=function findWithIndex(p){return function(xs){var i=0;var _iterator8=_createForOfIteratorHelper(xs),_step8;try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var x=_step8.value;if(p(x))return[x,i];i++;}}catch(err){_iterator8.e(err);}finally{_iterator8.f();}return[undefined,undefined];};};/* `f` is capped at 1.
*/var filter=exports.filter=function filter(f){return function(xs){return xs.filter(function(x){return f(x);});};};var reject=exports.reject=function reject(f){return function(xs){return xs.filter(function(x){return!f(x);});};};var containsV=exports.containsV=function containsV(v){return function(xs){var _iterator9=_createForOfIteratorHelper(xs),_step9;try{for(_iterator9.s();!(_step9=_iterator9.n()).done;){var x=_step9.value;if(x===v)return true;}}catch(err){_iterator9.e(err);}finally{_iterator9.f();}return false;};};var contains=exports.contains=function contains(p){return function(xs){var _iterator10=_createForOfIteratorHelper(xs),_step10;try{for(_iterator10.s();!(_step10=_iterator10.n()).done;){var x=_step10.value;if(p(x))return true;}}catch(err){_iterator10.e(err);}finally{_iterator10.f();}return false;};};/* @experimental
*
* Not clear this is useful. abortVal should be a predicate instead of a val, and then, why not just
* allow the caller to add a condition to `f`?
*/var reduceAbort=exports.reduceAbort=function reduceAbort(f){return function(accInit){return function(abortVal){return function(xs){var acc=accInit;var _iterator11=_createForOfIteratorHelper(xs),_step11;try{for(_iterator11.s();!(_step11=_iterator11.n()).done;){var x=_step11.value;var g=f(acc,x);if(g===abortVal)return abortVal;acc=g;}}catch(err){_iterator11.e(err);}finally{_iterator11.f();}return acc;};};};};// --- dropping too many returns an empty list.
var drop=exports.drop=function drop(x){return function(xs){return xs.slice(x);};};// --- taking too many returns the entire list.
var take=exports.take=function take(x){return function(xs){return xs.slice(0,x);};};// --- returns obj. Ignores symbol keys of `o`.
var eachObj=exports.eachObj=function eachObj(f){return function(o){for(var k in o)if(_internal.hasOwnProperty.call(o,k))f(o[k],k);return o;};};// --- returns obj
var eachObjIn=exports.eachObjIn=function eachObjIn(f){return function(o){for(var k in o)f(o[k],k);return o;};};/* `addIndex` and `addCollection` work on lists and objects.
*/var addIndex=exports.addIndex=function addIndex(orig){return function(f){var idx=-1;var g=function g(){for(var _len3=arguments.length,args=new Array(_len3),_key4=0;_key4<_len3;_key4++){args[_key4]=arguments[_key4];}return f.apply(void 0,args.concat([++idx]));};return orig(g);};};var addCollection=exports.addCollection=function addCollection(orig){return function(f){return function(coll){var g=function g(){for(var _len4=arguments.length,args=new Array(_len4),_key5=0;_key5<_len4;_key5++){args[_key5]=arguments[_key5];}return f.apply(void 0,args.concat([coll]));};return orig(g)(coll);};};};// --- successive forms can use the same function but just need to be recurried with different
// arity.
var addIndex2=exports.addIndex2=addIndex;/*
const addIndexC = (orig) => (f) => {
let idx = -1
// --- assumes args is non-empty (i.e., the function being mapped/reduced/etc. can't be called
// without arguments.
const g = (...args) => {
const [x, ...ys] = args
let o = f (x)
for (const y in ys)
o = o (y)
return o (++idx)
}
return orig (g)
}
*/var addCollection2=exports.addCollection2=function addCollection2(orig){return function(f){return function(x){return function(coll){var g=function g(){for(var _len5=arguments.length,args=new Array(_len5),_key6=0;_key6<_len5;_key6++){args[_key6]=arguments[_key6];}return f.apply(void 0,args.concat([coll]));};return orig(g)(x)(coll);};};};};/* Ignores symbol keys of `o`. */var reduceObj=exports.reduceObj=function reduceObj(f){return function(acc){return function(o){var curAcc=acc;for(var k in o)if(_internal.hasOwnProperty.call(o,k))curAcc=f(curAcc,[k,o[k]]);return curAcc;};};};var reduceObjIn=exports.reduceObjIn=function reduceObjIn(f){return function(acc){return function(o){var curAcc=acc;for(var k in o)curAcc=f(curAcc,[k,o[k]]);return curAcc;};};};/* --- @experimental: need more intuitive interface.
* --- e.g. 3 | ampersandN ([inc, double, odd]) = [4, 6, true]
* --- could alias `pam`:
* const pam = ampersandN
* 3 | pam ([inc, double, odd])
*/var ampersandN=exports.ampersandN=function ampersandN(fs){return function(x){var mapper=function mapper(f){return f(x);};return map(mapper)(fs);};};/* @todo
asteriskNN: fs => xs
asterisk2N: f => g => xs
asterisk2: f => g => a => b
asteriskMapNN: fs => xs
asteriskMap2N: f => g => xs
asteriskMap2: f => g => a => b
asteriskAppNN: xs => fs
asteriskApp2N: a => b => fs
asteriskApp2: a => b => f => g
anvilNN
asterisk = anvilNN
const arrowSnd = f => timesV (2) >> asteriskN ([id, f])
*/// --- @experimental
// --- asterisk is like a dot product of vectors: it takes a list of functions and a list of values
// and runs the functions corresponding to position.
// --- @todo make more intuitive.
var asteriskN=exports.asteriskN=function asteriskN(fs){return function(xs){var ret=[];var i=-1;var _iterator12=_createForOfIteratorHelper(fs),_step12;try{for(_iterator12.s();!(_step12=_iterator12.n()).done;){var f=_step12.value;var x=xs[++i];ret.push(f(x));}}catch(err){_iterator12.e(err);}finally{_iterator12.f();}return ret;};};// --- @todo: asteriskN, for when given an array of functions and a corresponding array of callees.
var asterisk1=exports.asterisk1=function asterisk1(f){return function(a){return[f(a)];};};var asterisk2=exports.asterisk2=function asterisk2(f){return function(g){return function(a){return function(b){return[f(a),g(b)];};};};};var asterisk3=exports.asterisk3=function asterisk3(f){return function(g){return function(h){return function(a){return function(b){return function(c){return[f(a),g(b),h(c)];};};};};};};var asterisk4=exports.asterisk4=function asterisk4(f){return function(g){return function(h){return function(i){return function(a){return function(b){return function(c){return function(d){return[f(a),g(b),h(c),i(d)];};};};};};};};};var asterisk5=exports.asterisk5=function asterisk5(f){return function(g){return function(h){return function(i){return function(j){return function(a){return function(b){return function(c){return function(d){return function(e){return[f(a),g(b),h(c),i(d),j(e)];};};};};};};};};};};// --------- lets / let / let...
var letNV=exports.letNV=function letNV(xs){return function(f){return f.apply(null,xs);};};/*
* lets = let* from racket
* letN = let* + array
* letS = let* + stick (S implies N)
* lets1, lets2, etc.: wrapped by lets, but can be called directly too.
* letNV = like letV, with array
* letV = let with values instead of functions
*/// --- last arg must be a function.
// --- 1 arg is possible but trivial.
var letV=exports.letV=function letV(){for(var _len6=arguments.length,xs=new Array(_len6),_key7=0;_key7<_len6;_key7++){xs[_key7]=arguments[_key7];}var f=xs.pop();return letNV(xs)(f);};/*
* For example, our `defaultTo` takes a function:
* null | defaultTo (_ -> 'bad news')
* For simple values, defaultToV can be more convenient:
* null | defaultToV ('bad news')
*/// --- trivial form.
var lets1=exports.lets1=function lets1(f){return invoke(f);};// --- @experimental lets2 - lets6 can be called directly as an optimisation (there is no pushing to
// an array or spreading values)
var lets2=exports.lets2=function lets2(f1,f2){var n1=f1();return f2(n1);};var lets3=exports.lets3=function lets3(f1,f2,f3){var n1=f1();var n2=f2(n1);return f3(n1,n2);};var lets4=exports.lets4=function lets4(f1,f2,f3,f4){var n1=f1();var n2=f2(n1);var n3=f3(n1,n2);return f4(n1,n2,n3);};var lets5=exports.lets5=function lets5(f1,f2,f3,f4,f5){var n1=f1();var n2=f2(n1);var n3=f3(n1,n2);var n4=f4(n1,n2,n3);return f5(n1,n2,n3,n4);};var lets6=exports.lets6=function lets6(f1,f2,f3,f4,f5,f6){var n1=f1();var n2=f2(n1);var n3=f3(n1,n2);var n4=f4(n1,n2,n3);var n5=f5(n1,n2,n3,n4);return f6(n1,n2,n3,n4,n5);};var letN=exports.letN=function letN(xs){return lets.apply(void 0,(0,_toConsumableArray2.default)(xs));};var lets=exports.lets=function lets(){var acc=[];var last;for(var _len7=arguments.length,fs=new Array(_len7),_key8=0;_key8<_len7;_key8++){fs[_key8]=arguments[_key8];}for(var _i3=0,_fs=fs;_i3<_fs.length;_i3++){var f=_fs[_i3];var ret=f.apply(void 0,acc);acc.push(ret);last=ret;}return last;};var letS=exports.letS=function letS(specAry){return function(tgt){return lets.apply(void 0,[function(_){return tgt;}].concat((0,_toConsumableArray2.default)(specAry)));};};// ------ call/provide
var callOn=exports.callOn=function callOn(o){return function(f){return f.call(o);};};var callOn1=exports.callOn1=function callOn1(o){return function(val1){return function(f){return f.call(o,val1);};};};var callOn2=exports.callOn2=function callOn2(o){return function(val1){return function(val2){return function(f){return f.call(o,val1,val2);};};};};var callOn3=exports.callOn3=function callOn3(o){return function(val1){return function(val2){return function(val3){return function(f){return f.call(o,val1,val2,val3);};};};};};var callOn4=exports.callOn4=function callOn4(o){return function(val1){return function(val2){return function(val3){return function(val4){return function(f){return f.call(o,val1,val2,val3,val4);};};};};};};var callOn5=exports.callOn5=function callOn5(o){return function(val1){return function(val2){return function(val3){return function(val4){return function(val5){return function(f){return f.call(o,val1,val2,val3,val4,val5);};};};};};};};var callOnN=exports.callOnN=function callOnN(o){return function(vs){return function(f){return f.apply(o,vs);};};};var provideTo=exports.provideTo=function provideTo(f){return function(o){return f.call(o);};};var provideTo1=exports.provideTo1=function provideTo1(f){return function(val){return function(o){return f.call(o,val);};};};var provideTo2=exports.provideTo2=function provideTo2(f){return function(val1){return function(val2){return function(o){return f.call(o,val1,val2);};};};};var provideTo3=exports.provideTo3=function provideTo3(f){return function(val1){return function(val2){return function(val3){return function(o){return f.call(o,val1,val2,val3);};};};};};var provideTo4=exports.provideTo4=function provideTo4(f){return function(val1){return function(val2){return function(val3){return function(val4){return function(o){return f.call(o,val1,val2,val3,val4);};};};};};};var provideTo5=exports.provideTo5=function provideTo5(f){return function(val1){return function(val2){return function(val3){return function(val4){return function(val5){return function(o){return f.call(o,val1,val2,val3,val4,val5);};};};};};};};var provideToN=exports.provideToN=function provideToN(f){return function(vs){return function(o){return f.apply(o,vs);};};};var invoke=exports.invoke=function invoke(f){return f();};var applyTo1=exports.applyTo1=function applyTo1(val1){return function(f){return f(val1);};};var applyTo2=exports.applyTo2=function applyTo2(val1){return function(val2){return function(f){return f(val1,val2);};};};var applyTo3=exports.applyTo3=function applyTo3(val1){return function(val2){return function(val3){return function(f){return f(val1,val2,val3);};};};};var applyTo4=exports.applyTo4=function applyTo4(val1){return function(val2){return function(val3){return function(val4){return function(f){return f(val1,val2,val3,val4);};};};};};var applyTo5=exports.applyTo5=function applyTo5(val1){return function(val2){return function(val3){return function(val4){return function(val5){return function(f){return f(val1,val2,val3,val4,val5);};};};};};};var applyToN=exports.applyToN=function applyToN(vs){return function(f){return f.apply(null,vs);};};var passTo=exports.passTo=function passTo(f){return function(val){return f(val);};};var passToN=exports.passToN=function passToN(f){return function(vs){return f.apply(null,vs);};};var spreadTo=exports.spreadTo=passToN;// ------ join, split etc.
var join=exports.join=dot1('join');var split=exports.split=dot1('split');var flip=exports.flip=function flip(f){return function(a){return function(b){return f(b)(a);};};};var flip3=exports.flip3=function flip3(f){return function(a){return function(b){return function(c){return f(b)(a)(c);};};};};var flip4=exports.flip4=function flip4(f){return function(a){return function(b){return function(c){return function(d){return f(b)(a)(c)(d);};};};};};var flip5=exports.flip5=function flip5(f){return function(a){return function(b){return function(c){return function(d){return function(e){return f(b)(a)(c)(d)(e);};};};};};};// ------ sprintf
var sprintf1=exports.sprintf1=function sprintf1(str){return function(a){return sprintf(str,a);};};var sprintfN=exports.sprintfN=function sprintfN(str){return function(xs){return sprintf.apply(null,[str].concat((0,_toConsumableArray2.default)(xs)));};};// ------ repeat, times
var repeatV=exports.repeatV=function repeatV(x){return function(n){var ret=[];for(var i=0;i<n;i++)ret.push(x);return ret;};};var repeatF=exports.repeatF=function repeatF(f){return function(n){var ret=[];for(var i=0;i<n;i++)ret.push(f(i));return ret;};};var repeatSide=exports.repeatSide=function repeatSide(f){return function(n){for(var i=0;i<n;i++)f(i);};};var timesV=exports.timesV=function timesV(n){return function(x){return repeatV(x)(n);};};var timesF=exports.timesF=function timesF(n){return function(f){return repeatF(f)(n);};};var timesSide=exports.timesSide=function timesSide(n){return function(f){return repeatSide(f)(n);};};// ------ replace / match
var ifReplace=exports.ifReplace=function ifReplace(yes){return function(no){return function(re){return function(replArg){return function(target){var success=0;var repl=typeof replArg==='function'?function(){return++success,replArg.apply(void 0,arguments);}:function(_){return++success,replArg;};var out=target.replace(re,repl);return success?yes(out,success):no(target);};};};};};// --- by should be negative to count down.
var rangeFromBy=exports.rangeFromBy=function rangeFromBy(by){return function(from){return function(to){return from<to?rangeFromByAsc(by)(from)(to):from>to?rangeFromByDesc(by)(from)(to):[];};};};// --- no corresponding to version.
var rangeFromByAsc=exports.rangeFromByAsc=function rangeFromByAsc(by){return function(from){return function(to){var ret=[];for(var i=from;i<to;i+=by)ret.push(i);return ret;};};};// --- no corresponding to version.
var rangeFromByDesc=exports.rangeFromByDesc=function rangeFromByDesc(by){return function(from){return function(to){var ret=[];for(var i=from;i>to;i+=by)ret.push(i);return ret;};};};var rangeToBy=exports.rangeToBy=function rangeToBy(by){return function(to){return function(from){return from<to?rangeFromByAsc(by)(from)(to):from>to?rangeFromByDesc(by)(from)(to):[];};};};// --------- regex.
// --- these deviate somewhat from the naming conventions: we're assuming you generally want to pipe
// the target to the match functions.
var removeSpaces=/*#__PURE__*/dot2('replace')(/\s+/g)('');// --- input: regex.
var xRegExp=exports.xRegExp=function xRegExp(re){return new RegExp(removeSpaces(re.source),re.flags);};// @todo curry
// --- beware, overwrites any flags that the re already had.
var xRegExpFlags=exports.xRegExpFlags=function xRegExpFlags(re,flags){return new RegExp(removeSpaces(re.source),flags);};// @todo curry, check default flags.
// --- input: string.
var xRegExpStr=exports.xRegExpStr=function xRegExpStr(reStr){var flags=arguments.length>1&&arguments[1]!==undefined?arguments[1]:'';return lets(function(_){return removeSpaces(reStr);},function(_){return flags;},function(x,y){return neu2(RegExp)(x)(y);});};// --- not every function (currently) has a matching 'replace' version.
// @todo make xMatch incur only a compile-time cost.
var neu1=exports.neu1=function neu1(x){return function(val1){return new x(val1);};};var neu2=exports.neu2=function neu2(x){return function(val1){return function(val2){return new x(val1,val2);};};};var neu3=exports.neu3=function neu3(x){return function(val1){return function(val2){return function(val3){return new x(val1,val2,val3);};};};};var neu4=exports.neu4=function neu4(x){return function(val1){return function(val2){return function(val3){return function(val4){return new x(val1,val2,val3,val4);};};};};};var neu5=exports.neu5=function neu5(x){return function(val1){return function(val2){return funct