From 658439651e260db440895c55d2a4abdb166aba06 Mon Sep 17 00:00:00 2001 From: Victor Freire Date: Thu, 20 Apr 2023 19:52:58 -0300 Subject: [PATCH] Added bind operator for Validation Close #188 --- src/FsToolkit.ErrorHandling/ValidationOp.fs | 7 ++++++- tests/FsToolkit.ErrorHandling.Tests/Validation.fs | 4 ++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/FsToolkit.ErrorHandling/ValidationOp.fs b/src/FsToolkit.ErrorHandling/ValidationOp.fs index 5f903d89..704c836e 100644 --- a/src/FsToolkit.ErrorHandling/ValidationOp.fs +++ b/src/FsToolkit.ErrorHandling/ValidationOp.fs @@ -4,7 +4,6 @@ open FsToolkit.ErrorHandling [] module Validation = - let inline () ([] mapper: 'okInput -> 'okOutput) (input: Validation<'okInput, 'error>) @@ -28,3 +27,9 @@ module Validation = (input: Result<'okInput, 'error>) : Validation<'okOutput, 'error> = Validation.apply applier (Validation.ofResult input) + + let inline (>>=) + (input: Validation<'okInput, 'error>) + ([] binder: 'okInput -> Validation<'okOutput, 'error>) + : Validation<'okOutput, 'error> = + Validation.bind binder input diff --git a/tests/FsToolkit.ErrorHandling.Tests/Validation.fs b/tests/FsToolkit.ErrorHandling.Tests/Validation.fs index 709cce3a..6258d22e 100644 --- a/tests/FsToolkit.ErrorHandling.Tests/Validation.fs +++ b/tests/FsToolkit.ErrorHandling.Tests/Validation.fs @@ -104,14 +104,14 @@ let applyTests = let operatorsTests = testList "Validation Operators Tests" [ - testCase "map & apply operators" + testCase "map, apply & bind operators" <| fun _ -> createPostRequest (lift validLatR) <*> (lift validLngR) <*> (lift validTweetR) + >>= (fun tweet -> Ok tweet) |> Expect.hasOkValue validCreatePostRequest - testCase "map^ & apply^ operators" <| fun _ -> createPostRequest