From 9b34ecebb138e2e3060e1a1bd74f43a18e52012c Mon Sep 17 00:00:00 2001 From: gusty <1261319+gusty@users.noreply.github.com> Date: Sun, 15 Oct 2023 06:36:24 +0200 Subject: [PATCH] + Functions for IList and IReadOnlyList --- src/FSharpPlus/Control/Alternative.fs | 3 +-- src/FSharpPlus/Extensions/IList.fs | 8 +++++--- src/FSharpPlus/Extensions/IReadOnlyList.fs | 9 ++++++++- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/FSharpPlus/Control/Alternative.fs b/src/FSharpPlus/Control/Alternative.fs index 9592be0d0..04ed136fa 100644 --- a/src/FSharpPlus/Control/Alternative.fs +++ b/src/FSharpPlus/Control/Alternative.fs @@ -1,10 +1,9 @@ -namespace FSharpPlus.Control - /// /// /// Generally internal and not useful directly - contains generic function overloaded implementations. /// /// +namespace FSharpPlus.Control #if (!FABLE_COMPILER || FABLE_COMPILER_3) && !FABLE_COMPILER_4 diff --git a/src/FSharpPlus/Extensions/IList.fs b/src/FSharpPlus/Extensions/IList.fs index f05ba64f5..6531879ec 100644 --- a/src/FSharpPlus/Extensions/IList.fs +++ b/src/FSharpPlus/Extensions/IList.fs @@ -1,7 +1,5 @@ namespace FSharpPlus -#if !FABLE_COMPILER - /// Additional operations IList<'T> [] module IList = @@ -14,4 +12,8 @@ module IList = /// The list converted to a System.Collections.Generic.IReadOnlyList let toIReadOnlyList (source: IList<_>) = ReadOnlyCollection source :> IReadOnlyList<_> -#endif + let ofArray (source: 'T[] ) = source :> IList<'T> + let ofList (source: 'T list) = source |> Array.ofList :> IList<'T> + let ofSeq (source: seq<'T>) = source |> Array.ofSeq :> IList<'T> + let map mapping (source: IList<'T>) = Seq.map mapping source |> Seq.toArray :> IList<'U> + let iter mapping (source: IList<'T>) = Seq.iter mapping source diff --git a/src/FSharpPlus/Extensions/IReadOnlyList.fs b/src/FSharpPlus/Extensions/IReadOnlyList.fs index b0910bf58..f975dfdc4 100644 --- a/src/FSharpPlus/Extensions/IReadOnlyList.fs +++ b/src/FSharpPlus/Extensions/IReadOnlyList.fs @@ -19,8 +19,15 @@ module IReadOnlyList = if 0 <= i && i < source.Count then source |> Array.ofSeq |> setNth i value |> ofArray |> Some else None + + let ofList (source: 'T list) = source |> Array.ofList |> IList.toIReadOnlyList + let ofSeq (source: seq<'T>) = source |> Array.ofSeq |> IList.toIReadOnlyList + #endif let tryItem i (source: IReadOnlyList<_>) = if 0 <= i && i < source.Count then Some source.[i] - else None \ No newline at end of file + else None + + let map mapping (source: IReadOnlyList<'T>) : IReadOnlyList<'U> = Seq.map mapping source |> Seq.toArray |> IList.toIReadOnlyList + let iter mapping (source: IReadOnlyList<'T>) = Seq.iter mapping source \ No newline at end of file