From 4173fddab7a3c8927e62140a79348471d56999e2 Mon Sep 17 00:00:00 2001 From: Brian Berns Date: Sat, 16 Apr 2022 00:57:54 -0400 Subject: [PATCH 1/2] Added Option.unzip and unzip3. --- src/Prelude/Extensions/Option.fs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Prelude/Extensions/Option.fs b/src/Prelude/Extensions/Option.fs index 24db6fd..6b6c935 100644 --- a/src/Prelude/Extensions/Option.fs +++ b/src/Prelude/Extensions/Option.fs @@ -68,6 +68,16 @@ module Option = with | _ -> None + /// Splits an optioned tuple into two options. + let unzip = function + | Some (a, b) -> Some a, Some b + | None -> None, None + + /// Splits an optioned tuple into three options. + let unzip3 = function + | Some (a, b, c) -> Some a, Some b, Some c + | None -> None, None, None + [] module OptionCE = From f0032fe562cde9542115ef05fd5242e3d8ececde Mon Sep 17 00:00:00 2001 From: Brian Berns Date: Sat, 16 Apr 2022 01:06:58 -0400 Subject: [PATCH 2/2] Added Option.zip3. --- src/Prelude/Extensions/Option.fs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Prelude/Extensions/Option.fs b/src/Prelude/Extensions/Option.fs index 6b6c935..7297c37 100644 --- a/src/Prelude/Extensions/Option.fs +++ b/src/Prelude/Extensions/Option.fs @@ -51,6 +51,19 @@ module Option = let zip (option1: 'a option) (option2: 'b option) : ('a * 'b) option = (fun a b -> a, b) option1 <*> option2 + let zip3 option1 option2 option3 = + (fun a b c -> a, b, c) option1 <*> option2 <*> option3 + + /// Splits an optioned tuple into two options. + let unzip = function + | Some (a, b) -> Some a, Some b + | None -> None, None + + /// Splits an optioned tuple into three options. + let unzip3 = function + | Some (a, b, c) -> Some a, Some b, Some c + | None -> None, None, None + let ofResult (result: Result<'a, 'b>) : 'a option = match result with | Ok ok -> Some ok @@ -68,16 +81,6 @@ module Option = with | _ -> None - /// Splits an optioned tuple into two options. - let unzip = function - | Some (a, b) -> Some a, Some b - | None -> None, None - - /// Splits an optioned tuple into three options. - let unzip3 = function - | Some (a, b, c) -> Some a, Some b, Some c - | None -> None, None, None - [] module OptionCE =