Skip to content

Commit

Permalink
Merge pull request #50 from adnelson/flatMapOkPure
Browse files Browse the repository at this point in the history
add flatMapOkPure function & tests
  • Loading branch information
briangorman committed Jul 12, 2020
2 parents 66ca4ad + d37a8a6 commit 9559b90
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 0 deletions.
21 changes: 21 additions & 0 deletions __tests__/TestFuture.re
Expand Up @@ -184,6 +184,27 @@ describe("Future Belt.Result", () => {
)
);

testAsync("flatMapOkPure 1", finish =>
Belt.Result.Ok("four")
->Future.value
->Future.flatMapOkPure(s => Belt.Result.Ok(s ++ "!"))
->Future.get(r =>
Belt.Result.getExn(r) |> expect |> toEqual("four!") |> finish
)
);

testAsync("flatMapOkPure 2", finish =>
Belt.Result.Error("err4.1")
->Future.value
->Future.flatMapOkPure(s => Belt.Result.Ok(s ++ "!"))
->Future.get(r =>
switch (r) {
| Ok(_) => fail("shouldn't be possible") |> finish
| Error(e) => e |> expect |> toEqual("err4.1") |> finish
}
)
);

testAsync("flatMapError 1", finish =>
Belt.Result.Ok("five")
->Future.value
Expand Down
3 changes: 3 additions & 0 deletions src/Future.re
Expand Up @@ -121,6 +121,8 @@ let flatMapOk = (future, f) =>
}
);

let flatMapOkPure = (fut, f) => fut->flatMapOk(result => value(result->f));

let flatMapError = (future, f) =>
future->flatMap(r =>
switch (r) {
Expand Down Expand Up @@ -163,4 +165,5 @@ let delay = (~executor=?, ms, f) =>
let sleep = (~executor=?, ms) => delay(~executor?, ms, () => ());

let (>>=) = flatMapOk;
let (>>==) = flatMapOkPure;
let (<$>) = mapOk;
6 changes: 6 additions & 0 deletions src/Future.rei
Expand Up @@ -19,6 +19,9 @@ let mapError:
let flatMapOk:
(t(Belt.Result.t('a, 'b)), 'a => t(Belt.Result.t('c, 'b))) =>
t(Belt.Result.t('c, 'b));
let flatMapOkPure:
(t(Belt.Result.t('a, 'b)), 'a => Belt.Result.t('c, 'b)) =>
t(Belt.Result.t('c, 'b));
let flatMapError:
(t(Belt.Result.t('a, 'b)), 'b => t(Belt.Result.t('a, 'c))) =>
t(Belt.Result.t('a, 'c));
Expand All @@ -45,4 +48,7 @@ let sleep: (~executor: executorType=?, int) => t(unit);
let ( >>= ):
(t(Belt.Result.t('a, 'b)), 'a => t(Belt.Result.t('c, 'b))) =>
t(Belt.Result.t('c, 'b));
let ( >>== ):
(t(Belt.Result.t('a, 'b)), 'a => Belt.Result.t('c, 'b)) =>
t(Belt.Result.t('c, 'b));
let ( <$> ): (t(Belt.Result.t('a, 'b)), 'a => 'c) => t(Belt.Result.t('c, 'b));

0 comments on commit 9559b90

Please sign in to comment.