All files manipulate.js

83.33% Statements 20/24
100% Branches 2/2
75% Functions 12/16
88.89% Lines 8/9
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38              1x       1x       1x       1x       1x       1x         1x       1x  
// requires [spread](spread.html),[reducers](reducers.html), and [cast](cast.html)
import { spread, } from './spread';
import { addBinMap, addBinSet, removeBin, removeBinTuple, } from './reducers';
import { asMap, asSet, } from './cast';
 
// **addMap** `:: Map[{k:v}] -> k -> v -> Map[{k:v}]`
// adds an element to a Map;
export const addMap = c => k => v => asMap(c).set(k, v);
 
// **addMapTuple** `:: Map[{k:v}] -> (...{k:v}) -> Map[{k:v}]`
// adds multiple [k,v] pairs to an iterable;
export const addMapTuple = c => (...tups) => tups.reduce(addBinMap, c);
 
// **addSet** `:: Set[a] -> (...a) -> Set[a]`
// adds multiple elements to a Set;
export const addSet = c => (...els) => els.reduce(addBinSet, c);
 
// **removeSet** `:: Set[a] -> (...a) -> Set[a]`
// removes multiple elements from a Set;
export const removeSet = c => (...els) => els.reduce(removeBin, asSet(c));
 
// **removeMap** `:: Map[{k:v}] -> (...k) -> Map[{k:v}]`
// removes multiple keys from a Map;
export const removeMap = c => (...els) => els.reduce(removeBin, asMap(c));
 
// **removeMapTuple** `:: Map[{k:v}] -> (...{k:v}) -> Map[{k:v}]`
// removes multiple [k,v] pairs from a Map;
export const removeMapTuple = c => (...tups) =>
  tups.reduce(removeBinTuple, asMap(c));
 
// **popElem** `:: Iterable<a> -> a -> Iterable<a>`
// removes the last element from an iterable;
export const popElem = c => el => removeBin(c, el) && el;
 
// **popFirst** `:: Iterable<a> -> a -> Iterable<a>`
// removes the first element from an iterable;
export const popFirst = c => popElem(c)(spread(c).shift());