functionalscript
Advanced tools
Comparing version 0.0.166 to 0.0.167
@@ -1,3 +0,3 @@ | ||
const { pipe } = require('../../func') | ||
const mr = require('../../map-reduce') | ||
const { pipe } = require('../../function') | ||
const seq = require('../../sequence') | ||
@@ -17,6 +17,6 @@ /** | ||
* @template T | ||
* @typedef {Iterable<T> | AsyncIterable<T>} AnyIterator | ||
* @typedef {Iterable<T> | AsyncIterable<T>} AnyIterable | ||
*/ | ||
/** @type {<T, R>(f: (value: T) => PromiseOrValue<R>) => (c: AnyIterator<T>) => AsyncIterable<R>} */ | ||
/** @type {<T, R>(f: (value: T) => PromiseOrValue<R>) => (c: AnyIterable<T>) => AsyncIterable<R>} */ | ||
const map = f => c => ({ | ||
@@ -30,3 +30,3 @@ async *[Symbol.asyncIterator]() { | ||
/** @type {<T>(c: AnyIterator<AnyIterator<T>>) => AsyncIterable<T>} */ | ||
/** @type {<T>(c: AnyIterable<AnyIterable<T>>) => AsyncIterable<T>} */ | ||
const flatten = c => ({ | ||
@@ -40,3 +40,3 @@ async *[Symbol.asyncIterator]() { | ||
/** @type {<T>(f: (value: T) => Promise<boolean>) => (c: AnyIterator<T>) => AnyIterator<T>} */ | ||
/** @type {<T>(f: (value: T) => Promise<boolean>) => (c: AnyIterable<T>) => AnyIterable<T>} */ | ||
const filter = f => c => ({ | ||
@@ -52,3 +52,3 @@ async *[Symbol.asyncIterator]() { | ||
/** @type {<T, R>(f: (value: T) => AnyIterator<R>) => (c: AnyIterator<T>) => AsyncIterable<R>} */ | ||
/** @type {<T, R>(f: (value: T) => AnyIterable<R>) => (c: AnyIterable<T>) => AsyncIterable<R>} */ | ||
const flatMap = f => pipe(map(f))(flatten) | ||
@@ -62,3 +62,3 @@ | ||
/** @type {<A, T>(merge: Merge<A, T>) => (init: A) => (c: AnyIterator<T>) => Promise<A>} */ | ||
/** @type {<A, T>(merge: Merge<A, T>) => (init: A) => (c: AnyIterable<T>) => Promise<A>} */ | ||
const reduce = merge => init => async c => { | ||
@@ -72,3 +72,3 @@ let result = init | ||
/** @type {<T>(a: AnyIterator<T>) => (b: AnyIterator<T>) => AsyncIterable<T>} */ | ||
/** @type {<T>(a: AnyIterable<T>) => (b: AnyIterable<T>) => AsyncIterable<T>} */ | ||
const concat = a => b => ({ | ||
@@ -81,3 +81,3 @@ async *[Symbol.asyncIterator]() { | ||
/** @type {<A, T>(merg: Merge<A, T>) => (init: A) => (c: AnyIterator<T>) => AsyncIterable<A>} */ | ||
/** @type {<A, T>(merg: Merge<A, T>) => (init: A) => (c: AnyIterable<T>) => AsyncIterable<A>} */ | ||
const exclusiveScan = merge => init => c => ({ | ||
@@ -93,13 +93,25 @@ async *[Symbol.asyncIterator]() { | ||
/** @type {<A, T>(merge: Merge<A, T>) => (init: A) => (c: AnyIterator<T>) => AsyncIterable<A>} */ | ||
/** @type {<T, R>(es: seq.ExlusiveScan<T, R>) => (c: AnyIterable<T>) => AsyncIterable<R>} */ | ||
const applyExclusiveScan = es => c => ({ | ||
async *[Symbol.asyncIterator]() { | ||
let ies = es | ||
for await (const i of c) { | ||
const result = ies(i) | ||
ies = result[1] | ||
yield result[0] | ||
} | ||
} | ||
}) | ||
/** @type {<A, T>(merge: Merge<A, T>) => (init: A) => (c: AnyIterable<T>) => AsyncIterable<A>} */ | ||
const inclusiveScan = merge => init => c => concat([init])(exclusiveScan(merge)(init)(c)) | ||
/** @type {<I, S, R>(op: mr.Operation<I, S, R>) => (_: AnyIterator<I>) => Promise<R>} */ | ||
/** @type {<I, S, R>(op: seq.Operation<I, S, R>) => (_: AnyIterable<I>) => Promise<R>} */ | ||
const apply = ({ merge, init, result }) => async c => result(await reduce(merge)(init)(c)) | ||
const sum = apply(mr.sum) | ||
const sum = apply(seq.sum) | ||
const join = pipe(mr.join)(apply) | ||
const join = pipe(seq.join)(apply) | ||
const size = apply(mr.size) | ||
const size = apply(seq.size) | ||
@@ -106,0 +118,0 @@ module.exports = { |
@@ -1,3 +0,3 @@ | ||
const { pipe } = require('../func') | ||
const mr = require('../map-reduce') | ||
const { pipe } = require('../function') | ||
const seq = require('../sequence') | ||
@@ -41,3 +41,3 @@ /** | ||
/** @type {<T, R>(es: mr.ExlusiveScan<T, R>) => (c: Iterable<T>) => Iterable<R>} */ | ||
/** @type {<T, R>(es: seq.ExlusiveScan<T, R>) => (c: Iterable<T>) => Iterable<R>} */ | ||
const applyExclusiveScan = es => c => ({ | ||
@@ -54,12 +54,12 @@ *[Symbol.iterator]() { | ||
const entries = applyExclusiveScan(mr.entries) | ||
const entries = applyExclusiveScan(seq.entries) | ||
/** @type {<I, S, R>(op: mr.Operation<I, S, R>) => (_: Iterable<I>) => R} */ | ||
/** @type {<I, S, R>(op: seq.Operation<I, S, R>) => (_: Iterable<I>) => R} */ | ||
const apply = ({ merge, init, result }) => pipe(reduce(merge)(init))(result) | ||
const sum = apply(mr.sum) | ||
const sum = apply(seq.sum) | ||
const size = apply(mr.size) | ||
const size = apply(seq.size) | ||
const join = pipe(mr.join)(apply) | ||
const join = pipe(seq.join)(apply) | ||
@@ -66,0 +66,0 @@ /** @type {<T, R>(f: (value: T) => R) => (c: Iterable<T>) => Iterable<R>} */ |
const i = require('.') | ||
const { pipe } = require('../func') | ||
const { pipe } = require('../function') | ||
@@ -4,0 +4,0 @@ { |
const array = require('../array') | ||
const { pipe } = require('../func') | ||
const { pipe } = require('../function') | ||
const option = require('../option') | ||
@@ -41,3 +41,3 @@ const { head, last, splitLast, splitFirst } = array | ||
/** @type {import('../map-reduce').Operation<string, undefined|Path, undefined|Path>} */ | ||
/** @type {import('../sequence').Operation<string, undefined|Path, undefined|Path>} */ | ||
const pathNormReduce = { | ||
@@ -44,0 +44,0 @@ merge: path => item => |
{ | ||
"name": "functionalscript", | ||
"version": "0.0.166", | ||
"version": "0.0.167", | ||
"description": "FunctionalScript is a functional subset of JavaScript", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
79231
1438