From e5f3d4b0da452492e7a9880e56fceb4d688894a5 Mon Sep 17 00:00:00 2001 From: Ian McIntosh Date: Mon, 6 Jun 2022 16:39:45 -0400 Subject: [PATCH] Fix Task.flatTap signature. --- lib/src/task.dart | 2 +- test/task_test.dart | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lib/src/task.dart b/lib/src/task.dart index fbae897..573dd8b 100644 --- a/lib/src/task.dart +++ b/lib/src/task.dart @@ -52,7 +52,7 @@ class Task implements MonadCatchOps { Task delayBy(Duration duration) => sleep(duration).productR(this); - Task flatTap(Task that) => productL(that); + Task flatTap(Function1> f) => flatMap((a) => f(a).replace(a)); Task guarantee(Task finalizer) => Task(() => _run().whenComplete(() => finalizer._run())); diff --git a/test/task_test.dart b/test/task_test.dart index cf2eba1..66b06ec 100644 --- a/test/task_test.dart +++ b/test/task_test.dart @@ -24,6 +24,19 @@ void main() { expect(result.fold(id, id) is FormatException, true); }); + test("Task flatTap", () async { + var count = 0; + + final one = Task.value(1); + final inc = (int i) => Task.delay(() => count += i).voided; + + await one.flatTap(inc).run(); + expect(count, 1); + + await one.flatTap(inc).flatTap(inc).run(); + expect(count, 3); + }); + test("Task.both (concurrent)", () async { final one = Task.value(1).delayBy(Duration(seconds: 1)); final two = Task.value(2).delayBy(Duration(seconds: 1));