import curry2 from "../function/curry2";
/**
* Generates a list based on a seed and an iterator function.
* The iterator function accepts a single argument - a seed.
* The iterator needs to return either `false` to stop the generation or an array of 2 elements.
* The first element in the array is the value that's going to be appended to the result,
* while the second element is the seed for the next iteration.
*
* @param {function} fn
* @param {any} seed
* @returns {any[]}
*/
const unfold = (fn, seed) => {
let tuple = fn(seed);
const result = [];
while (tuple && Array.isArray(tuple)) {
result.push(tuple[0]);
tuple = fn(tuple[1]);
}
return result;
};
export default curry2(unfold);