@@ -29,11 +29,12 @@ Added in v2.0.0
29
29
- [ FoldableComposition22 (interface)] ( #foldablecomposition22-interface )
30
30
- [ FoldableComposition22C (interface)] ( #foldablecomposition22c-interface )
31
31
- [ FoldableComposition2C1 (interface)] ( #foldablecomposition2c1-interface )
32
- - [ foldM] ( #foldm )
33
32
- [ getFoldableComposition] ( #getfoldablecomposition )
34
33
- [ intercalate] ( #intercalate )
34
+ - [ reduceM] ( #reducem )
35
35
- [ toArray] ( #toarray )
36
36
- [ traverse\_ ] ( #traverse_ )
37
+ - [ ~~ foldM~~ ] ( #foldm )
37
38
38
39
---
39
40
@@ -260,57 +261,6 @@ export interface FoldableComposition2C1<F extends URIS2, G extends URIS, E> {
260
261
261
262
Added in v2.0.0
262
263
263
- ## foldM
264
-
265
- Similar to 'reduce', but the result is encapsulated in a monad.
266
-
267
- Note: this function is not generally stack-safe, e.g., for monads which build up thunks a la ` IO ` .
268
-
269
- ** Signature**
270
-
271
- ``` ts
272
- export declare function foldM<M extends URIS3 , F extends URIS >(
273
- M : Monad3 <M >,
274
- F : Foldable1 <F >
275
- ): <R , E , A , B >(fa : Kind <F , A >, b : B , f : (b : B , a : A ) => Kind3 <M , R , E , B >) => Kind3 <M , R , E , B >
276
- export declare function foldM<M extends URIS3 , F extends URIS , E >(
277
- M : Monad3C <M , E >,
278
- F : Foldable1 <F >
279
- ): <R , A , B >(fa : Kind <F , A >, b : B , f : (b : B , a : A ) => Kind3 <M , R , E , B >) => Kind3 <M , R , E , B >
280
- export declare function foldM<M extends URIS2 , F extends URIS >(
281
- M : Monad2 <M >,
282
- F : Foldable1 <F >
283
- ): <E , A , B >(fa : Kind <F , A >, b : B , f : (b : B , a : A ) => Kind2 <M , E , B >) => Kind2 <M , E , B >
284
- export declare function foldM<M extends URIS2 , F extends URIS , E >(
285
- M : Monad2C <M , E >,
286
- F : Foldable1 <F >
287
- ): <A , B >(fa : Kind <F , A >, b : B , f : (b : B , a : A ) => Kind2 <M , E , B >) => Kind2 <M , E , B >
288
- export declare function foldM<M extends URIS , F extends URIS >(
289
- M : Monad1 <M >,
290
- F : Foldable1 <F >
291
- ): <A , B >(fa : Kind <F , A >, b : B , f : (b : B , a : A ) => Kind <M , B >) => Kind <M , B >
292
- export declare function foldM<M , F >(
293
- M : Monad <M >,
294
- F : Foldable <F >
295
- ): <A , B >(fa : HKT <F , A >, b : B , f : (b : B , a : A ) => HKT <M , B >) => HKT <M , B >
296
- ```
297
-
298
- ** Example **
299
-
300
- ` ` ` ts
301
- import { foldM } from 'fp-ts/Foldable'
302
- import { option, some } from 'fp-ts/Option'
303
- import { make, tree } from 'fp-ts/Tree'
304
-
305
- const t = make(1, [make(2, []), make(3, []), make(4, [])])
306
- assert.deepStrictEqual(
307
- foldM(option, tree)(t, 0, (b, a) => (a > 2 ? some(b + a) : some(b))),
308
- some(7)
309
- )
310
- ` ` `
311
-
312
- Added in v2 .0.0
313
-
314
264
## getFoldableComposition
315
265
316
266
Returns the composition of two foldables
@@ -400,6 +350,61 @@ assert.strictEqual(intercalate(monoidString, tree)('|', t), 'a|b|c|d')
400
350
401
351
Added in v2 .0.0
402
352
353
+ ## reduceM
354
+
355
+ Similar to ' reduce' , but the result is encapsulated in a monad .
356
+
357
+ Note : this function is not generally stack-safe, e.g., for monads which build up thunks a la `IO`.
358
+
359
+ ** Signature **
360
+
361
+ ` ` ` ts
362
+ export declare function reduceM<M extends URIS3, F extends URIS>(
363
+ M: Monad3<M>,
364
+ F: Foldable1<F>
365
+ ): <B, A, R, E>(b: B, f: (b: B, a: A) => Kind3<M, R, E, B>) => (fa: Kind<F, A>) => Kind3<M, R, E, B>
366
+ export declare function reduceM<M extends URIS3, F extends URIS, E>(
367
+ M: Monad3C<M, E>,
368
+ F: Foldable1<F>
369
+ ): <B, A, R>(b: B, f: (b: B, a: A) => Kind3<M, R, E, B>) => (fa: Kind<F, A>) => Kind3<M, R, E, B>
370
+ export declare function reduceM<M extends URIS2, F extends URIS>(
371
+ M: Monad2<M>,
372
+ F: Foldable1<F>
373
+ ): <B, A, E>(b: B, f: (b: B, a: A) => Kind2<M, E, B>) => (fa: Kind<F, A>) => Kind2<M, E, B>
374
+ export declare function reduceM<M extends URIS2, F extends URIS, E>(
375
+ M: Monad2C<M, E>,
376
+ F: Foldable1<F>
377
+ ): <B, A>(b: B, f: (b: B, a: A) => Kind2<M, E, B>) => (fa: Kind<F, A>) => Kind2<M, E, B>
378
+ export declare function reduceM<M extends URIS, F extends URIS>(
379
+ M: Monad1<M>,
380
+ F: Foldable1<F>
381
+ ): <B, A>(b: B, f: (b: B, a: A) => Kind<M, B>) => (fa: Kind<F, A>) => Kind<M, B>
382
+ export declare function reduceM<M, F>(
383
+ M: Monad<M>,
384
+ F: Foldable<F>
385
+ ): <B, A>(b: B, f: (b: B, a: A) => HKT<M, B>) => (fa: HKT<F, A>) => HKT<M, B>
386
+ ` ` `
387
+
388
+ ** Example **
389
+
390
+ ` ` ` ts
391
+ import { reduceM } from 'fp-ts/Foldable'
392
+ import { Monad, some } from 'fp-ts/Option'
393
+ import { make, Foldable } from 'fp-ts/Tree'
394
+ import { pipe } from 'fp-ts/function'
395
+
396
+ const t = make(1, [make(2, []), make(3, []), make(4, [])])
397
+ assert.deepStrictEqual(
398
+ pipe(
399
+ t,
400
+ reduceM(Monad, Foldable)(0, (b, a) => (a > 2 ? some(b + a) : some(b)))
401
+ ),
402
+ some(7)
403
+ )
404
+ ` ` `
405
+
406
+ Added in v2 .8.0
407
+
403
408
## toArray
404
409
405
410
Transforms a ` Foldable ` into a read - only array .
@@ -476,3 +481,38 @@ assert.strictEqual(log, 'abc')
476
481
` ` `
477
482
478
483
Added in v2 .0.0
484
+
485
+ ## ~~ foldM ~~
486
+
487
+ Use ` reduceM ` instead
488
+
489
+ ** Signature **
490
+
491
+ ` ` ` ts
492
+ export declare function foldM<M extends URIS3, F extends URIS>(
493
+ M: Monad3<M>,
494
+ F: Foldable1<F>
495
+ ): <R, E, A, B>(fa: Kind<F, A>, b: B, f: (b: B, a: A) => Kind3<M, R, E, B>) => Kind3<M, R, E, B>
496
+ export declare function foldM<M extends URIS3, F extends URIS, E>(
497
+ M: Monad3C<M, E>,
498
+ F: Foldable1<F>
499
+ ): <R, A, B>(fa: Kind<F, A>, b: B, f: (b: B, a: A) => Kind3<M, R, E, B>) => Kind3<M, R, E, B>
500
+ export declare function foldM<M extends URIS2, F extends URIS>(
501
+ M: Monad2<M>,
502
+ F: Foldable1<F>
503
+ ): <E, A, B>(fa: Kind<F, A>, b: B, f: (b: B, a: A) => Kind2<M, E, B>) => Kind2<M, E, B>
504
+ export declare function foldM<M extends URIS2, F extends URIS, E>(
505
+ M: Monad2C<M, E>,
506
+ F: Foldable1<F>
507
+ ): <A, B>(fa: Kind<F, A>, b: B, f: (b: B, a: A) => Kind2<M, E, B>) => Kind2<M, E, B>
508
+ export declare function foldM<M extends URIS, F extends URIS>(
509
+ M: Monad1<M>,
510
+ F: Foldable1<F>
511
+ ): <A, B>(fa: Kind<F, A>, b: B, f: (b: B, a: A) => Kind<M, B>) => Kind<M, B>
512
+ export declare function foldM<M, F>(
513
+ M: Monad<M>,
514
+ F: Foldable<F>
515
+ ): <A, B>(fa: HKT<F, A>, b: B, f: (b: B, a: A) => HKT<M, B>) => HKT<M, B>
516
+ ` ` `
517
+
518
+ Added in v2 .0.0
0 commit comments