diff --git a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md
index 2687dc328e99..3422beea1d09 100644
--- a/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md
+++ b/docs/release-notes/.FSharp.Compiler.Service/8.0.400.md
@@ -30,6 +30,7 @@
* Support empty-bodied computation expressions. ([Language suggestion #1232](https://github.com/fsharp/fslang-suggestions/issues/1232), [RFC FS-1144 (PR #774)](https://github.com/fsharp/fslang-design/pull/774), [PR #17352](https://github.com/dotnet/fsharp/pull/17352))
### Changed
+* `Initial refactoring of FSharp.Core` ([Issues #17372](https://github.com/dotnet/fsharp/issues/17372), [PR #17370](https://github.com/dotnet/fsharp/pull/17370))
* Enforce `AttributeTargets.Interface` ([PR #17173](https://github.com/dotnet/fsharp/pull/17173))
* Minor compiler perf improvements. ([PR #17130](https://github.com/dotnet/fsharp/pull/17130))
* Improve error messages for active pattern argument count mismatch ([PR #16846](https://github.com/dotnet/fsharp/pull/16846), [PR #17186](https://github.com/dotnet/fsharp/pull/17186))
diff --git a/docs/release-notes/.FSharp.Core/8.0.400.md b/docs/release-notes/.FSharp.Core/8.0.400.md
index 3f9a780974b2..a3818d2ba87f 100644
--- a/docs/release-notes/.FSharp.Core/8.0.400.md
+++ b/docs/release-notes/.FSharp.Core/8.0.400.md
@@ -8,6 +8,7 @@
* Cache delegate in query extensions. ([PR #17130](https://github.com/dotnet/fsharp/pull/17130))
* Update `AllowNullLiteralAttribute` to also use `AttributeTargets.Interface` ([PR #17173](https://github.com/dotnet/fsharp/pull/17173))
+* `Initial refactoring of FSharp.Core` ([Issues #17372](https://github.com/dotnet/fsharp/issues/17372), [PR #17370](https://github.com/dotnet/fsharp/pull/17370))
### Breaking Changes
diff --git a/src/Compiler/Driver/CompilerConfig.fs b/src/Compiler/Driver/CompilerConfig.fs
index 675c0edd9461..3300a75ddf6a 100644
--- a/src/Compiler/Driver/CompilerConfig.fs
+++ b/src/Compiler/Driver/CompilerConfig.fs
@@ -122,8 +122,7 @@ let ComputeMakePathAbsolute implicitIncludeDir (path: string) =
with :? ArgumentException ->
path
-let isCoreLibrary compilingLibraryName =
- compilingLibraryName = "FSharp.Core"
+let isCoreLibrary compilingLibraryName = compilingLibraryName = "FSharp.Core"
//----------------------------------------------------------------------------
// Configuration
@@ -1234,7 +1233,10 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) =
member _.noFeedback = data.noFeedback
member _.stackReserveSize = data.stackReserveSize
member _.implicitIncludeDir = data.implicitIncludeDir
- member _.openDebugInformationForLaterStaticLinking = data.openDebugInformationForLaterStaticLinking
+
+ member _.openDebugInformationForLaterStaticLinking =
+ data.openDebugInformationForLaterStaticLinking
+
member _.fsharpBinariesDir = data.defaultFSharpBinariesDir
member _.compilingLibraryName = data.compilingLibraryName
member _.useIncrementalBuilder = data.useIncrementalBuilder
@@ -1470,7 +1472,8 @@ type TcConfig private (data: TcConfigBuilder, validate: bool) =
member tcConfig.GenerateOptimizationData = tcConfig.GenerateSignatureData
- member tcConfig.assumeDotNetFramework = tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib
+ member tcConfig.assumeDotNetFramework =
+ tcConfig.primaryAssembly = PrimaryAssembly.Mscorlib
member tcConfig.compilingCoreLibrary = isCoreLibrary tcConfig.compilingLibraryName
diff --git a/src/FSharp.Core/FSharp.Core.fsproj b/src/FSharp.Core/FSharp.Core.fsproj
index 32aeb2fc498f..993ac74c8c07 100644
--- a/src/FSharp.Core/FSharp.Core.fsproj
+++ b/src/FSharp.Core/FSharp.Core.fsproj
@@ -25,7 +25,7 @@
$(OtherFlags) --nowarn:3511
$(OtherFlags) --nowarn:3513
- $(OtherFlags) --compiling-fslib --compiling-fslib-40 --maxerrors:100 --extraoptimizationloops:1
+ $(OtherFlags) --compiling-fslib --maxerrors:100 --extraoptimizationloops:1
true
true
diff --git a/src/FSharp.Core/Linq.fs b/src/FSharp.Core/Linq.fs
index cf7033e09db3..7afa7d471382 100644
--- a/src/FSharp.Core/Linq.fs
+++ b/src/FSharp.Core/Linq.fs
@@ -345,10 +345,10 @@ module LeafExpressionConverter =
let (|ConvIntPtrQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Operators.nativeint))
let (|ConvUIntPtrQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Operators.unativeint))
- let (|ConvInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToSByte"))
- let (|ConvUInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToByte"))
- let (|ConvDoubleQ|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToDouble"))
- let (|ConvSingleQ|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToSingle"))
+ let (|ConvInt8Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.int8 x))
+ let (|ConvUInt8Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.uint8 x))
+ let (|ConvDoubleQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.double x))
+ let (|ConvSingleQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.single x))
let (|ConvNullableCharQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Nullable.char))
let (|ConvNullableDecimalQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Nullable.decimal))
@@ -374,8 +374,8 @@ module LeafExpressionConverter =
let (|TypeTestGeneric|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> LanguagePrimitives.IntrinsicFunctions.TypeTestGeneric x))
let (|CheckedConvCharQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Checked.char))
let (|CheckedConvSByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Checked.sbyte))
- let (|CheckedConvInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked").GetMethod("ToSByte"))
- let (|CheckedConvUInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked").GetMethod("ToByte"))
+ let (|CheckedConvInt8Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.Checked.int8 x))
+ let (|CheckedConvUInt8Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.Checked.uint8 x))
let (|CheckedConvInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Checked.int16))
let (|CheckedConvInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Checked.int32))
let (|CheckedConvInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (Checked.int64))
diff --git a/src/FSharp.Core/async.fs b/src/FSharp.Core/async.fs
index 9f9a2d1ef485..f6eda0982e8b 100644
--- a/src/FSharp.Core/async.fs
+++ b/src/FSharp.Core/async.fs
@@ -2246,6 +2246,9 @@ type Async =
module CommonExtensions =
+ []
+ let async = AsyncBuilder()
+
type System.IO.Stream with
[] // give the extension member a 'nice', unmangled compiled name, unique within this module
diff --git a/src/FSharp.Core/async.fsi b/src/FSharp.Core/async.fsi
index 6b621176c9d8..3e7ec38d196b 100644
--- a/src/FSharp.Core/async.fsi
+++ b/src/FSharp.Core/async.fsi
@@ -1394,6 +1394,24 @@ namespace Microsoft.FSharp.Control
[]
module CommonExtensions =
+ /// Builds an asynchronous workflow using computation expression syntax.
+ ///
+ ///
+ ///
+ /// let sleepExample() =
+ /// async {
+ /// printfn "sleeping"
+ /// do! Async.Sleep 10
+ /// printfn "waking up"
+ /// return 6
+ /// }
+ ///
+ /// sleepExample() |> Async.RunSynchronously
+ ///
+ ///
+ []
+ val async: AsyncBuilder
+
type System.IO.Stream with
/// Returns an asynchronous computation that will read from the stream into the given buffer.
diff --git a/src/FSharp.Core/fslib-extra-pervasives.fs b/src/FSharp.Core/fslib-extra-pervasives.fs
index b5cf5dee3aff..c4fd4bd9a0be 100644
--- a/src/FSharp.Core/fslib-extra-pervasives.fs
+++ b/src/FSharp.Core/fslib-extra-pervasives.fs
@@ -6,6 +6,7 @@ module ExtraTopLevelOperators =
open System
open System.Collections.Generic
+ open System.ComponentModel
open System.IO
open System.Diagnostics
open Microsoft.FSharp
@@ -280,32 +281,32 @@ module ExtraTopLevelOperators =
let eprintfn format =
Printf.eprintfn format
- []
+ []
let async = AsyncBuilder()
- []
+ []
let inline single value =
float32 value
- []
+ []
let inline double value =
float value
- []
+ []
let inline uint8 value =
byte value
- []
+ []
let inline int8 value =
sbyte value
module Checked =
- []
+ []
let inline uint8 value =
Checked.byte value
- []
+ []
let inline int8 value =
Checked.sbyte value
diff --git a/src/FSharp.Core/fslib-extra-pervasives.fsi b/src/FSharp.Core/fslib-extra-pervasives.fsi
index 97120245f87a..98dc35133370 100644
--- a/src/FSharp.Core/fslib-extra-pervasives.fsi
+++ b/src/FSharp.Core/fslib-extra-pervasives.fsi
@@ -9,6 +9,7 @@ namespace Microsoft.FSharp.Core
[]
module ExtraTopLevelOperators =
+ open System.ComponentModel
open System.IO
open Microsoft.FSharp.Core
open Microsoft.FSharp.Control
@@ -130,7 +131,7 @@ module ExtraTopLevelOperators =
/// sleepExample() |> Async.RunSynchronously
///
///
- []
+ []
val async: AsyncBuilder
/// Converts the argument to 32-bit float.
@@ -144,7 +145,7 @@ module ExtraTopLevelOperators =
///
/// Evaluates to 45.0f.
///
- []
+ []
val inline single: value: ^T -> single when ^T : (static member op_Explicit : ^T -> single) and default ^T : int
/// Converts the argument to 64-bit float.
@@ -165,7 +166,7 @@ module ExtraTopLevelOperators =
///
/// Evaluates to 12.30000019.
///
- []
+ []
val inline double: value: ^T -> double when ^T : (static member op_Explicit : ^T -> double) and default ^T : int
/// Converts the argument to byte.
@@ -178,7 +179,7 @@ module ExtraTopLevelOperators =
///
/// Evaluates to 12uy.
///
- []
+ []
val inline uint8: value: ^T -> uint8 when ^T : (static member op_Explicit : ^T -> uint8) and default ^T : int
/// Converts the argument to signed byte.
@@ -199,7 +200,7 @@ module ExtraTopLevelOperators =
///
/// Evaluates to 3y.
///
- []
+ []
val inline int8: value: ^T -> int8 when ^T : (static member op_Explicit : ^T -> int8) and default ^T : int
module Checked =
@@ -221,7 +222,7 @@ module ExtraTopLevelOperators =
///
/// Throws System.OverflowException.
///
- []
+ []
val inline uint8: value: ^T -> byte when ^T : (static member op_Explicit : ^T -> uint8) and default ^T : int
/// Converts the argument to signed byte.
@@ -242,7 +243,7 @@ module ExtraTopLevelOperators =
///
/// Throws System.OverflowException.
///
- []
+ []
val inline int8: value: ^T -> sbyte when ^T : (static member op_Explicit : ^T -> int8) and default ^T : int
/// Builds a read-only lookup table from a sequence of key/value pairs. The key objects are indexed using generic hashing and equality.
@@ -339,7 +340,7 @@ module ExtraTopLevelOperators =
///
/// Evaluates to 10. The text eval! is printed once on the first invocation of f.
///
- []
+ []
val (|Lazy|): input: Lazy<'T> -> 'T
/// Builds a query using query syntax and operators.
diff --git a/src/FSharp.Core/prim-types.fs b/src/FSharp.Core/prim-types.fs
index 556fb1bcde5d..4b512baf7f22 100644
--- a/src/FSharp.Core/prim-types.fs
+++ b/src/FSharp.Core/prim-types.fs
@@ -4742,6 +4742,9 @@ namespace Microsoft.FSharp.Core
// this condition is used whenever ^T is resolved to a nominal type or witnesses are available
when ^T : ^T = (^T : (static member op_Explicit: ^T -> byte) (value))
+ []
+ let inline uint8 value = byte value
+
[]
[]
let inline sbyte (value: ^T) =
@@ -4764,6 +4767,10 @@ namespace Microsoft.FSharp.Core
// this condition is used whenever ^T is resolved to a nominal type or witnesses are available
when ^T : ^T = (^T : (static member op_Explicit: ^T -> sbyte) (value))
+
+ []
+ let inline int8 value = sbyte value
+
[]
[]
let inline uint16 (value: ^T) =
@@ -4944,6 +4951,8 @@ namespace Microsoft.FSharp.Core
when ^T : byte = (# "conv.r.un conv.r4" value : float32 #)
when ^T : ^T = (^T : (static member op_Explicit: ^T -> float32) (value))
+ let inline single value = float32 value
+
[]
[]
let inline float (value: ^T) =
@@ -4966,6 +4975,8 @@ namespace Microsoft.FSharp.Core
when ^T : decimal = (Convert.ToDouble((# "" value : decimal #)))
when ^T : ^T = (^T : (static member op_Explicit: ^T -> float) (value))
+ let inline double value = float value
+
[]
[]
let inline decimal (value: ^T) =
@@ -5496,6 +5507,9 @@ namespace Microsoft.FSharp.Core
when ^T : byte = (# "" value : byte #)
when ^T : ^T = (^T : (static member op_Explicit: ^T -> byte) (value))
+ []
+ let inline uint8 value = byte value
+
[]
[]
let inline sbyte (value: ^T) =
@@ -5516,6 +5530,9 @@ namespace Microsoft.FSharp.Core
when ^T : byte = (# "conv.ovf.i1.un" value : sbyte #)
when ^T : ^T = (^T : (static member op_Explicit: ^T -> sbyte) (value))
+ []
+ let inline int8 value = sbyte value
+
[]
[]
let inline uint16 (value: ^T) =
@@ -7152,6 +7169,7 @@ namespace Microsoft.FSharp.Control
open Microsoft.FSharp.Core.Operators
module LazyExtensions =
+
type System.Lazy<'T> with
[] // give the extension member a 'nice', unmangled compiled name, unique within this module
static member Create(creator : unit -> 'T) : Lazy<'T> =
@@ -7176,6 +7194,9 @@ namespace Microsoft.FSharp.Control
[] // give the extension member a 'nice', unmangled compiled name, unique within this module
member x.UnsynchronizedForce() = x.Value
+
+ []
+ let (|Lazy|) (input: Lazy<_>) = input.Force()
type Lazy<'T> = System.Lazy<'T>
diff --git a/src/FSharp.Core/prim-types.fsi b/src/FSharp.Core/prim-types.fsi
index 2b3bcf1ac7c8..f4c7ca28fcbb 100644
--- a/src/FSharp.Core/prim-types.fsi
+++ b/src/FSharp.Core/prim-types.fsi
@@ -3249,7 +3249,7 @@ namespace Microsoft.FSharp.Core
///
[]
val (|Failure|_|): error: exn -> string option
-
+
/// Return the first element of a tuple, fst (a,b) = a.
///
/// The input tuple.
@@ -4324,8 +4324,22 @@ namespace Microsoft.FSharp.Core
///
///
[]
- val inline byte: value: ^T -> byte when ^T: (static member op_Explicit: ^T -> byte) and default ^T: int
-
+ val inline byte: value: ^T -> byte when ^T: (static member op_Explicit: ^T -> byte) and default ^T: int
+
+ /// Converts the argument to uint8.
+ /// This is a direct conversion for all
+ /// primitive numeric types. For strings, the input is converted using Byte.Parse()
+ /// on strings and otherwise requires a ToByte method on the input type.
+ ///
+ ///
+ ///
+ /// uint8 12
+ ///
+ /// Evaluates to 12uy.
+ ///
+ []
+ val inline uint8: value: ^T -> uint8 when ^T : (static member op_Explicit : ^T -> uint8) and default ^T : int
+
/// Converts the argument to signed byte. This is a direct conversion for all
/// primitive numeric types. For strings, the input is converted using SByte.Parse()
/// with InvariantCulture settings. Otherwise the operation requires an appropriate
@@ -4346,6 +4360,27 @@ namespace Microsoft.FSharp.Core
[]
val inline sbyte: value:^T -> sbyte when ^T: (static member op_Explicit: ^T -> sbyte) and default ^T: int
+ /// Converts the argument to signed byte.
+ /// This is a direct, checked conversion for all
+ /// primitive numeric types. For strings, the input is converted using SByte.Parse() with InvariantCulture settings.
+ /// Otherwise the operation requires and invokes a ToSByte method on the input type.
+ ///
+ ///
+ ///
+ /// Checked.int8 -12
+ ///
+ /// Evaluates to -12y.
+ ///
+ ///
+ ///
+ ///
+ /// Checked.int8 "129"
+ ///
+ /// Throws System.OverflowException.
+ ///
+ []
+ val inline int8: value: ^T -> sbyte when ^T : (static member op_Explicit : ^T -> int8) and default ^T : int
+
/// Converts the argument to signed 16-bit integer. This is a direct conversion for all
/// primitive numeric types. For strings, the input is converted using Int16.Parse()
/// with InvariantCulture settings. Otherwise the operation requires an appropriate
@@ -4545,6 +4580,19 @@ namespace Microsoft.FSharp.Core
[]
val inline float32: value: ^T -> float32 when ^T: (static member op_Explicit: ^T -> float32) and default ^T: int
+ /// Converts the argument to 32-bit float.
+ ///
+ /// This is a direct conversion for all
+ /// primitive numeric types. For strings, the input is converted using Single.Parse() with InvariantCulture settings. Otherwise the operation requires and invokes a ToSingle method on the input type.
+ ///
+ ///
+ ///
+ /// single 45
+ ///
+ /// Evaluates to 45.0f.
+ ///
+ val inline single: value: ^T -> single when ^T : (static member op_Explicit : ^T -> single) and default ^T : int
+
/// Converts the argument to 64-bit float. This is a direct conversion for all
/// primitive numeric types. For strings, the input is converted using Double.Parse()
/// with InvariantCulture settings. Otherwise the operation requires an appropriate
@@ -4565,6 +4613,26 @@ namespace Microsoft.FSharp.Core
[]
val inline float: value: ^T -> float when ^T: (static member op_Explicit: ^T -> float) and default ^T: int
+ /// Converts the argument to 64-bit float.
+ ///
+ /// This is a direct conversion for all
+ /// primitive numeric types. For strings, the input is converted using Double.Parse() with InvariantCulture settings. Otherwise the operation requires and invokes a ToDouble method on the input type.
+ ///
+ ///
+ ///
+ /// double 45
+ ///
+ /// Evaluates to 45.0.
+ ///
+ ///
+ ///
+ ///
+ /// double 12.3f
+ ///
+ /// Evaluates to 12.30000019.
+ ///
+ val inline double: value: ^T -> double when ^T : (static member op_Explicit : ^T -> double) and default ^T : int
+
/// Converts the argument to signed native integer. This is a direct conversion for all
/// primitive numeric types. Otherwise the operation requires an appropriate
/// static conversion method on the input type.
@@ -5797,6 +5865,26 @@ namespace Microsoft.FSharp.Core
[]
val inline byte: value: ^T -> byte when ^T: (static member op_Explicit: ^T -> byte) and default ^T: int
+ /// Converts the argument to byte.
+ /// This is a direct, checked conversion for all
+ /// primitive numeric types. For strings, the input is converted using Byte.Parse() on strings and otherwise requires a ToByte method on the input type.
+ ///
+ ///
+ ///
+ /// Checked.uint8 12
+ ///
+ /// Evaluates to -12y.
+ ///
+ ///
+ ///
+ ///
+ /// Checked.uint8 -12
+ ///
+ /// Throws System.OverflowException.
+ ///
+ []
+ val inline uint8: value: ^T -> byte when ^T : (static member op_Explicit : ^T -> uint8) and default ^T : int
+
/// Converts the argument to sbyte. This is a direct, checked conversion for all
/// primitive numeric types. For strings, the input is converted using
/// with InvariantCulture settings. Otherwise the operation requires an appropriate
@@ -5811,6 +5899,27 @@ namespace Microsoft.FSharp.Core
[]
val inline sbyte: value: ^T -> sbyte when ^T: (static member op_Explicit: ^T -> sbyte) and default ^T: int
+ /// Converts the argument to signed byte.
+ /// This is a direct, checked conversion for all
+ /// primitive numeric types. For strings, the input is converted using SByte.Parse() with InvariantCulture settings.
+ /// Otherwise the operation requires and invokes a ToSByte method on the input type.
+ ///
+ ///
+ ///
+ /// Checked.int8 -12
+ ///
+ /// Evaluates to -12y.
+ ///
+ ///
+ ///
+ ///
+ /// Checked.int8 "129"
+ ///
+ /// Throws System.OverflowException.
+ ///
+ []
+ val inline int8: value: ^T -> sbyte when ^T : (static member op_Explicit : ^T -> int8) and default ^T : int
+
/// Converts the argument to int16. This is a direct, checked conversion for all
/// primitive numeric types. For strings, the input is converted using
/// with InvariantCulture settings. Otherwise the operation requires an appropriate
@@ -5953,6 +6062,19 @@ namespace Microsoft.FSharp.Control
open Microsoft.FSharp.Core
+
+ /// The type of delayed computations.
+ ///
+ /// Use the values in the Lazy module to manipulate
+ /// values of this type, and the notation lazy expr to create values
+ /// of type .
+ ///
+ /// Lazy Computation
+ type Lazy<'T> = System.Lazy<'T>
+ and
+ []
+ 'T ``lazy`` = System.Lazy<'T>
+
/// Extensions related to Lazy values.
///
/// Lazy Computation
@@ -5982,18 +6104,22 @@ namespace Microsoft.FSharp.Control
/// The value of the Lazy object.
[] // give the extension member a 'nice', unmangled compiled name, unique within this module
member Force: unit -> 'T
-
- /// The type of delayed computations.
- ///
- /// Use the values in the Lazy module to manipulate
- /// values of this type, and the notation lazy expr to create values
- /// of type .
- ///
- /// Lazy Computation
- type Lazy<'T> = System.Lazy<'T>
- and
- []
- 'T ``lazy`` = System.Lazy<'T>
+
+ /// An active pattern to force the execution of values of type Lazy<_>.
+ ///
+ ///
+ ///
+ /// let f (Lazy v) = v + v
+ ///
+ /// let v = lazy (printf "eval!"; 5+5)
+ ///
+ /// f v
+ /// f v
+ ///
+ /// Evaluates to 10. The text eval! is printed once on the first invocation of f.
+ ///
+ []
+ val (|Lazy|): input: Lazy<'T> -> 'T
namespace Microsoft.FSharp.Control
diff --git a/tests/AheadOfTime/Trimming/check.ps1 b/tests/AheadOfTime/Trimming/check.ps1
index c9699c66c1b2..4c0f2fbe6cb2 100644
--- a/tests/AheadOfTime/Trimming/check.ps1
+++ b/tests/AheadOfTime/Trimming/check.ps1
@@ -42,7 +42,7 @@ function CheckTrim($root, $tfm, $outputfile, $expected_len) {
# error NETSDK1124: Trimming assemblies requires .NET Core 3.0 or higher.
# Check net7.0 trimmed assemblies
-CheckTrim -root "SelfContained_Trimming_Test" -tfm "net8.0" -outputfile "FSharp.Core.dll" -expected_len 284672
+CheckTrim -root "SelfContained_Trimming_Test" -tfm "net8.0" -outputfile "FSharp.Core.dll" -expected_len 285184
# Check net8.0 trimmed assemblies
CheckTrim -root "StaticLinkedFSharpCore_Trimming_Test" -tfm "net8.0" -outputfile "StaticLinkedFSharpCore_Trimming_Test.dll" -expected_len 8818176
diff --git a/tests/FSharp.Compiler.ComponentTests/EmittedIL/RefactorExtraPervasives.fs b/tests/FSharp.Compiler.ComponentTests/EmittedIL/RefactorExtraPervasives.fs
new file mode 100644
index 000000000000..62bc4d22a475
--- /dev/null
+++ b/tests/FSharp.Compiler.ComponentTests/EmittedIL/RefactorExtraPervasives.fs
@@ -0,0 +1,395 @@
+// Copyright (c) Microsoft Corporation. All Rights Reserved. See License.txt in the project root for license information.
+
+namespace EmittedIL
+
+open Xunit
+open FSharp.Test.Compiler
+open FSharp.Test.Compiler.Assertions.StructuredResultsAsserts
+
+module RefactorExtraPervasives =
+
+ let lazyPatternSource code = $"""
+module LazyExtensionsModule
+let printlazy v = match v with | {code} x -> x
+let _ = printlazy (lazy "Hello, World")
+"""
+
+ []
+ []
+ []
+ let ``LazyPattern - LazyExtensions`` (code) =
+ FSharp (lazyPatternSource code)
+ |> asExe
+ |> withOptimize
+ |> compileAndRun
+ |> shouldSucceed
+ |> verifyIL [
+#if Release
+ """
+ .method public static !!a printlazy(class [runtime]System.Lazy`1 v) cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: callvirt instance !0 class [netstandard]System.Lazy`1::get_Value()
+ IL_0006: ret
+ } """
+ """ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldsfld class LazyExtensionsModule/clo@4 LazyExtensionsModule/clo@4::@_instance
+ IL_0005: call class [runtime]System.Lazy`1 [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::Create(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2)
+ IL_000a: callvirt instance !0 class [netstandard]System.Lazy`1::get_Value()
+ IL_000f: pop
+ IL_0010: ret
+ } """ ]
+#else
+ """
+ .method public static !!a printlazy(class [runtime]System.Lazy`1 v) cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: tail.
+ IL_0003: call !!0 [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::LazyPattern(class [runtime]System.Lazy`1)
+ IL_0008: ret
+ } """
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldsfld class LazyExtensionsModule/clo@4 LazyExtensionsModule/clo@4::@_instance
+ IL_0005: call class [runtime]System.Lazy`1 [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::Create(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2)
+ IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::LazyPattern(class [runtime]System.Lazy`1)
+ IL_000f: pop
+ IL_0010: ret
+ } """ ]
+#endif
+
+ []
+ []
+ let ``LazyPattern - ExtraTopLevelOperators`` (code) =
+ FSharp (lazyPatternSource code)
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+ |> verifyIL [
+#if Release
+ """
+ .method public static !!a printlazy(class [runtime]System.Lazy`1 v) cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: callvirt instance !0 class [netstandard]System.Lazy`1::get_Value()
+ IL_0006: ret
+ } """
+ """ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldsfld class LazyExtensionsModule/clo@4 LazyExtensionsModule/clo@4::@_instance
+ IL_0005: call class [runtime]System.Lazy`1 [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::Create(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2)
+ IL_000a: callvirt instance !0 class [netstandard]System.Lazy`1::get_Value()
+ IL_000f: pop
+ IL_0010: ret
+ } """ ]
+#else
+ """
+ .method public static !!a printlazy(class [runtime]System.Lazy`1 v) cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldarg.0
+ IL_0001: tail.
+ IL_0003: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::LazyPattern(class [runtime]System.Lazy`1)
+ IL_0008: ret
+ } """
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldsfld class LazyExtensionsModule/clo@4 LazyExtensionsModule/clo@4::@_instance
+ IL_0005: call class [runtime]System.Lazy`1 [FSharp.Core]Microsoft.FSharp.Control.LazyExtensions::Create(class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2)
+ IL_000a: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::LazyPattern(class [runtime]System.Lazy`1)
+ IL_000f: pop
+ IL_0010: ret
+ } """ ]
+#endif
+
+
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ let ``convert to byte unchecked``(code) =
+ FSharp $"""
+module OperatorsTests
+{code}"""
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+ |> verifyIL [
+#if Release
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: stsfld uint8 OperatorsTests::x@3
+ IL_0007: ldstr "%d"
+ IL_000c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,uint8>::.ctor(string)
+ IL_0011: stsfld class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::format@1
+ IL_0016: call class [netstandard]System.IO.TextWriter [netstandard]System.Console::get_Out()
+ IL_001b: call class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::get_format@1()
+ IL_0020: call !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [runtime]System.IO.TextWriter,
+ class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0025: call uint8 OperatorsTests::get_x()
+ IL_002a: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_002f: pop
+ IL_0030: ret
+ } """ ]
+#else
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: stsfld uint8 OperatorsTests::x@3
+ IL_0007: ldstr "%d"
+ IL_000c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,uint8>::.ctor(string)
+ IL_0011: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0016: call uint8 OperatorsTests::get_x()
+ IL_001b: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_0020: pop
+ IL_0021: ret
+ } """ ]
+#endif
+
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ let ``convert to byte checked``(code) =
+ FSharp $"""
+module OperatorsTests
+{code}"""
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+ |> verifyIL [
+#if Release
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: conv.ovf.u1
+ IL_0003: stsfld uint8 OperatorsTests::x@3
+ IL_0008: ldstr "%d"
+ IL_000d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,uint8>::.ctor(string)
+ IL_0012: stsfld class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::format@1
+ IL_0017: call class [netstandard]System.IO.TextWriter [netstandard]System.Console::get_Out()
+ IL_001c: call class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::get_format@1()
+ IL_0021: call !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [runtime]System.IO.TextWriter,
+ class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0026: call uint8 OperatorsTests::get_x()
+ IL_002b: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_0030: pop
+ IL_0031: ret
+ } """ ]
+#else
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: conv.ovf.u1
+ IL_0003: stsfld uint8 OperatorsTests::x@3
+ IL_0008: ldstr "%d"
+ IL_000d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,uint8>::.ctor(string)
+ IL_0012: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0017: call uint8 OperatorsTests::get_x()
+ IL_001c: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_0021: pop
+ IL_0022: ret
+ }
+""" ]
+#endif
+
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ let ``convert to sbyte unchecked``(code) =
+ FSharp $"""
+module OperatorsTests
+{code}"""
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+ |> verifyIL [
+#if Release
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: stsfld int8 OperatorsTests::x@3
+ IL_0007: ldstr "%d"
+ IL_000c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int8>::.ctor(string)
+ IL_0011: stsfld class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::format@1
+ IL_0016: call class [netstandard]System.IO.TextWriter [netstandard]System.Console::get_Out()
+ IL_001b: call class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::get_format@1()
+ IL_0020: call !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [runtime]System.IO.TextWriter,
+ class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0025: call int8 OperatorsTests::get_x()
+ IL_002a: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_002f: pop
+ IL_0030: ret
+ } """ ]
+#else
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: stsfld int8 OperatorsTests::x@3
+ IL_0007: ldstr "%d"
+ IL_000c: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int8>::.ctor(string)
+ IL_0011: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0016: call int8 OperatorsTests::get_x()
+ IL_001b: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_0020: pop
+ IL_0021: ret
+ } """ ]
+#endif
+
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ []
+ let ``convert to sbyte checked``(code) =
+ FSharp $"""
+module OperatorsTests
+{code}"""
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+ |> verifyIL [
+#if Release
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: conv.ovf.i1
+ IL_0003: stsfld int8 OperatorsTests::x@3
+ IL_0008: ldstr "%d"
+ IL_000d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int8>::.ctor(string)
+ IL_0012: stsfld class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::format@1
+ IL_0017: call class [netstandard]System.IO.TextWriter [netstandard]System.Console::get_Out()
+ IL_001c: call class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit> OperatorsTests::get_format@1()
+ IL_0021: call !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [runtime]System.IO.TextWriter,
+ class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0026: call int8 OperatorsTests::get_x()
+ IL_002b: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_0030: pop
+ IL_0031: ret
+ } """ ]
+#else
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: ldc.i4.s 25
+ IL_0002: conv.ovf.i1
+ IL_0003: stsfld int8 OperatorsTests::x@3
+ IL_0008: ldstr "%d"
+ IL_000d: newobj instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [runtime]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,int8>::.ctor(string)
+ IL_0012: call !!0 [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::PrintFormatLine>(class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+ IL_0017: call int8 OperatorsTests::get_x()
+ IL_001c: callvirt instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+ IL_0021: pop
+ IL_0022: ret
+ } """ ]
+#endif
+
+ []
+ []
+ []
+ let ``verifyDefaultAsyncImplementation - CommonExtensions``(code) =
+ FSharp $"""
+module AsyncTests
+{code}"""
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+ |> verifyIL [
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Control.CommonExtensions::get_DefaultAsyncBuilder()
+ IL_0005: stsfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncTests::_x@3
+ IL_000a: ret
+ } """]
+
+ []
+ []
+ let ``verifyDefaultAsyncImplementation - ExtraTopLevelOperators``(code) =
+ FSharp $"""
+module AsyncTests
+{code}"""
+ |> asLibrary
+ |> withOptimize
+ |> compile
+ |> shouldSucceed
+ |> verifyIL [
+ """
+ .method assembly specialname static void staticInitialization@() cil managed
+ {
+
+ .maxstack 8
+ IL_0000: call class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder [FSharp.Core]Microsoft.FSharp.Core.ExtraTopLevelOperators::get_DefaultAsyncBuilder()
+ IL_0005: stsfld class [FSharp.Core]Microsoft.FSharp.Control.FSharpAsyncBuilder AsyncTests::_x@3
+ IL_000a: ret
+ } """ ]
diff --git a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj
index aa3435737919..2718fad73c22 100644
--- a/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj
+++ b/tests/FSharp.Compiler.ComponentTests/FSharp.Compiler.ComponentTests.fsproj
@@ -164,6 +164,7 @@
+
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl
index def2dea16c8e..bd2d2eefa389 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.debug.bsl
@@ -126,6 +126,9 @@ Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Co
Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[])
Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[])
Microsoft.FSharp.Collections.ArrayModule: T Min[T](T[])
+Microsoft.FSharp.Collections.ArrayModule: T RandomChoiceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], T[])
+Microsoft.FSharp.Collections.ArrayModule: T RandomChoiceWith[T](System.Random, T[])
+Microsoft.FSharp.Collections.ArrayModule: T RandomChoice[T](T[])
Microsoft.FSharp.Collections.ArrayModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[])
Microsoft.FSharp.Collections.ArrayModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[])
Microsoft.FSharp.Collections.ArrayModule: T Sum$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[])
@@ -164,6 +167,15 @@ Microsoft.FSharp.Collections.ArrayModule: T[] InsertManyAt[T](Int32, System.Coll
Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomChoicesBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomChoicesWith[T](System.Random, Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomChoices[T](Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomSampleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomSampleWith[T](System.Random, Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomSample[T](Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomShuffleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomShuffleWith[T](System.Random, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomShuffle[T](T[])
Microsoft.FSharp.Collections.ArrayModule: T[] RemoveAt[T](Int32, T[])
Microsoft.FSharp.Collections.ArrayModule: T[] RemoveManyAt[T](Int32, Int32, T[])
Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T)
@@ -194,6 +206,9 @@ Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.
Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], T1[], T2[])
Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[])
Microsoft.FSharp.Collections.ArrayModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[])
+Microsoft.FSharp.Collections.ArrayModule: Void RandomShuffleInPlaceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], T[])
+Microsoft.FSharp.Collections.ArrayModule: Void RandomShuffleInPlaceWith[T](System.Random, T[])
+Microsoft.FSharp.Collections.ArrayModule: Void RandomShuffleInPlace[T](T[])
Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T)
Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[])
Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[])
@@ -329,6 +344,15 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomChoicesBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomChoicesWith[T](System.Random, Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomChoices[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomSampleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomSampleWith[T](System.Random, Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomSample[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomShuffleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomShuffleWith[T](System.Random, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomShuffle[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RemoveAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RemoveManyAt[T](Int32, Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T)
@@ -377,6 +401,9 @@ Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Cor
Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T Min[T](Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: T RandomChoiceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: T RandomChoiceWith[T](System.Random, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: T RandomChoice[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T Sum$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T])
@@ -483,6 +510,15 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomChoicesBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomChoicesWith[T](System.Random, Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomChoices[T](Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomSampleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomSampleWith[T](System.Random, Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomSample[T](Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomShuffleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomShuffleWith[T](System.Random, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomShuffle[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RemoveAt[T](Int32, System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RemoveManyAt[T](Int32, Int32, System.Collections.Generic.IEnumerable`1[T])
@@ -518,6 +554,9 @@ Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core
Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: T RandomChoiceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: T RandomChoiceWith[T](System.Random, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: T RandomChoice[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T Sum$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T])
@@ -692,6 +731,7 @@ Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelega
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T)
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T])
Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T])
+Microsoft.FSharp.Control.LazyExtensions: T LazyPattern[T](System.Lazy`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T])
@@ -1591,6 +1631,8 @@ Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 [,]`1.GetReverseIndex[T](
Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 []`1.GetReverseIndex[T](T[], Int32, Int32)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1603,6 +1645,8 @@ Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64$W[T](Microsoft.FSharp.Cor
Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.IntPtr], T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,T], T)
@@ -1758,12 +1802,16 @@ Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T)
Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T)
Microsoft.FSharp.Core.Operators: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators: Double Infinity
Microsoft.FSharp.Core.Operators: Double NaN
Microsoft.FSharp.Core.Operators: Double ToDouble$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
Microsoft.FSharp.Core.Operators: Double ToDouble[T](T)
+Microsoft.FSharp.Core.Operators: Double double$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
+Microsoft.FSharp.Core.Operators: Double double[T](T)
Microsoft.FSharp.Core.Operators: Double get_Infinity()
Microsoft.FSharp.Core.Operators: Double get_NaN()
Microsoft.FSharp.Core.Operators: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1793,6 +1841,8 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked
+Microsoft.FSharp.Core.Operators: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators: Single InfinitySingle
@@ -1801,6 +1851,8 @@ Microsoft.FSharp.Core.Operators: Single ToSingle$W[T](Microsoft.FSharp.Core.FSha
Microsoft.FSharp.Core.Operators: Single ToSingle[T](T)
Microsoft.FSharp.Core.Operators: Single get_InfinitySingle()
Microsoft.FSharp.Core.Operators: Single get_NaNSingle()
+Microsoft.FSharp.Core.Operators: Single single$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Single], T)
+Microsoft.FSharp.Core.Operators: Single single[T](T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep$W[T,TStep](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TStep], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T)
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl
index e1864618be61..c9512e7116dc 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard20.release.bsl
@@ -731,6 +731,7 @@ Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelega
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T)
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T])
Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T])
+Microsoft.FSharp.Control.LazyExtensions: T LazyPattern[T](System.Lazy`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T])
@@ -1630,6 +1631,8 @@ Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 [,]`1.GetReverseIndex[T](
Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 []`1.GetReverseIndex[T](T[], Int32, Int32)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1642,6 +1645,8 @@ Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64$W[T](Microsoft.FSharp.Cor
Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.IntPtr], T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,T], T)
@@ -1797,12 +1802,16 @@ Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T)
Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T)
Microsoft.FSharp.Core.Operators: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators: Double Infinity
Microsoft.FSharp.Core.Operators: Double NaN
Microsoft.FSharp.Core.Operators: Double ToDouble$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
Microsoft.FSharp.Core.Operators: Double ToDouble[T](T)
+Microsoft.FSharp.Core.Operators: Double double$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
+Microsoft.FSharp.Core.Operators: Double double[T](T)
Microsoft.FSharp.Core.Operators: Double get_Infinity()
Microsoft.FSharp.Core.Operators: Double get_NaN()
Microsoft.FSharp.Core.Operators: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1832,6 +1841,8 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked
+Microsoft.FSharp.Core.Operators: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators: Single InfinitySingle
@@ -1840,6 +1851,8 @@ Microsoft.FSharp.Core.Operators: Single ToSingle$W[T](Microsoft.FSharp.Core.FSha
Microsoft.FSharp.Core.Operators: Single ToSingle[T](T)
Microsoft.FSharp.Core.Operators: Single get_InfinitySingle()
Microsoft.FSharp.Core.Operators: Single get_NaNSingle()
+Microsoft.FSharp.Core.Operators: Single single$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Single], T)
+Microsoft.FSharp.Core.Operators: Single single[T](T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep$W[T,TStep](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TStep], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T)
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl
index 5fa4760b53ed..5b4f8f8fa8ae 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.debug.bsl
@@ -126,6 +126,9 @@ Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Co
Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[])
Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[])
Microsoft.FSharp.Collections.ArrayModule: T Min[T](T[])
+Microsoft.FSharp.Collections.ArrayModule: T RandomChoiceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], T[])
+Microsoft.FSharp.Collections.ArrayModule: T RandomChoiceWith[T](System.Random, T[])
+Microsoft.FSharp.Collections.ArrayModule: T RandomChoice[T](T[])
Microsoft.FSharp.Collections.ArrayModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[])
Microsoft.FSharp.Collections.ArrayModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[])
Microsoft.FSharp.Collections.ArrayModule: T Sum$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[])
@@ -164,6 +167,15 @@ Microsoft.FSharp.Collections.ArrayModule: T[] InsertManyAt[T](Int32, System.Coll
Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomChoicesBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomChoicesWith[T](System.Random, Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomChoices[T](Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomSampleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomSampleWith[T](System.Random, Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomSample[T](Int32, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomShuffleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomShuffleWith[T](System.Random, T[])
+Microsoft.FSharp.Collections.ArrayModule: T[] RandomShuffle[T](T[])
Microsoft.FSharp.Collections.ArrayModule: T[] RemoveAt[T](Int32, T[])
Microsoft.FSharp.Collections.ArrayModule: T[] RemoveManyAt[T](Int32, Int32, T[])
Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T)
@@ -194,6 +206,9 @@ Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.
Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], T1[], T2[])
Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[])
Microsoft.FSharp.Collections.ArrayModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[])
+Microsoft.FSharp.Collections.ArrayModule: Void RandomShuffleInPlaceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], T[])
+Microsoft.FSharp.Collections.ArrayModule: Void RandomShuffleInPlaceWith[T](System.Random, T[])
+Microsoft.FSharp.Collections.ArrayModule: Void RandomShuffleInPlace[T](T[])
Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T)
Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[])
Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[])
@@ -329,6 +344,15 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomChoicesBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomChoicesWith[T](System.Random, Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomChoices[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomSampleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomSampleWith[T](System.Random, Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomSample[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomShuffleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomShuffleWith[T](System.Random, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RandomShuffle[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RemoveAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] RemoveManyAt[T](Int32, Int32, Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T)
@@ -377,6 +401,9 @@ Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Cor
Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T Min[T](Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: T RandomChoiceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: T RandomChoiceWith[T](System.Random, Microsoft.FSharp.Collections.FSharpList`1[T])
+Microsoft.FSharp.Collections.ListModule: T RandomChoice[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.ListModule: T Sum$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T])
@@ -483,6 +510,15 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomChoicesBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomChoicesWith[T](System.Random, Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomChoices[T](Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomSampleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomSampleWith[T](System.Random, Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomSample[T](Int32, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomShuffleBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomShuffleWith[T](System.Random, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RandomShuffle[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RemoveAt[T](Int32, System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] RemoveManyAt[T](Int32, Int32, System.Collections.Generic.IEnumerable`1[T])
@@ -518,6 +554,9 @@ Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core
Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: T RandomChoiceBy[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Double], System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: T RandomChoiceWith[T](System.Random, System.Collections.Generic.IEnumerable`1[T])
+Microsoft.FSharp.Collections.SeqModule: T RandomChoice[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Collections.SeqModule: T Sum$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T])
@@ -692,6 +731,7 @@ Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelega
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T)
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T])
Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T])
+Microsoft.FSharp.Control.LazyExtensions: T LazyPattern[T](System.Lazy`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T])
@@ -1592,6 +1632,8 @@ Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 [,]`1.GetReverseIndex[T](
Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 []`1.GetReverseIndex[T](T[], Int32, Int32)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1604,6 +1646,8 @@ Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64$W[T](Microsoft.FSharp.Cor
Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.IntPtr], T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,T], T)
@@ -1759,12 +1803,16 @@ Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T)
Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T)
Microsoft.FSharp.Core.Operators: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators: Double Infinity
Microsoft.FSharp.Core.Operators: Double NaN
Microsoft.FSharp.Core.Operators: Double ToDouble$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
Microsoft.FSharp.Core.Operators: Double ToDouble[T](T)
+Microsoft.FSharp.Core.Operators: Double double$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
+Microsoft.FSharp.Core.Operators: Double double[T](T)
Microsoft.FSharp.Core.Operators: Double get_Infinity()
Microsoft.FSharp.Core.Operators: Double get_NaN()
Microsoft.FSharp.Core.Operators: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1794,6 +1842,8 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked
+Microsoft.FSharp.Core.Operators: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators: Single InfinitySingle
@@ -1802,6 +1852,8 @@ Microsoft.FSharp.Core.Operators: Single ToSingle$W[T](Microsoft.FSharp.Core.FSha
Microsoft.FSharp.Core.Operators: Single ToSingle[T](T)
Microsoft.FSharp.Core.Operators: Single get_InfinitySingle()
Microsoft.FSharp.Core.Operators: Single get_NaNSingle()
+Microsoft.FSharp.Core.Operators: Single single$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Single], T)
+Microsoft.FSharp.Core.Operators: Single single[T](T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep$W[T,TStep](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TStep], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T)
diff --git a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl
index 92d85ccd98de..f86ef272a447 100644
--- a/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl
+++ b/tests/FSharp.Core.UnitTests/FSharp.Core.SurfaceArea.netstandard21.release.bsl
@@ -731,6 +731,7 @@ Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelega
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T)
Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T])
Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T])
+Microsoft.FSharp.Control.LazyExtensions: T LazyPattern[T](System.Lazy`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T])
Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T])
@@ -1631,6 +1632,8 @@ Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 [,]`1.GetReverseIndex[T](
Microsoft.FSharp.Core.Operators+ArrayExtensions: Int32 []`1.GetReverseIndex[T](T[], Int32, Int32)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators+Checked: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1643,6 +1646,8 @@ Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64$W[T](Microsoft.FSharp.Cor
Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.IntPtr], T)
Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators+Checked: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,T], T)
@@ -1798,12 +1803,16 @@ Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T)
Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T)
Microsoft.FSharp.Core.Operators: Byte ToByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
Microsoft.FSharp.Core.Operators: Byte ToByte[T](T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Byte], T)
+Microsoft.FSharp.Core.Operators: Byte ToUInt8[T](T)
Microsoft.FSharp.Core.Operators: Char ToChar$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Char], T)
Microsoft.FSharp.Core.Operators: Char ToChar[T](T)
Microsoft.FSharp.Core.Operators: Double Infinity
Microsoft.FSharp.Core.Operators: Double NaN
Microsoft.FSharp.Core.Operators: Double ToDouble$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
Microsoft.FSharp.Core.Operators: Double ToDouble[T](T)
+Microsoft.FSharp.Core.Operators: Double double$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Double], T)
+Microsoft.FSharp.Core.Operators: Double double[T](T)
Microsoft.FSharp.Core.Operators: Double get_Infinity()
Microsoft.FSharp.Core.Operators: Double get_NaN()
Microsoft.FSharp.Core.Operators: Int16 ToInt16$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int16], T)
@@ -1833,6 +1842,8 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked
+Microsoft.FSharp.Core.Operators: SByte ToInt8$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
+Microsoft.FSharp.Core.Operators: SByte ToInt8[T](T)
Microsoft.FSharp.Core.Operators: SByte ToSByte$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.SByte], T)
Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T)
Microsoft.FSharp.Core.Operators: Single InfinitySingle
@@ -1841,6 +1852,8 @@ Microsoft.FSharp.Core.Operators: Single ToSingle$W[T](Microsoft.FSharp.Core.FSha
Microsoft.FSharp.Core.Operators: Single ToSingle[T](T)
Microsoft.FSharp.Core.Operators: Single get_InfinitySingle()
Microsoft.FSharp.Core.Operators: Single get_NaNSingle()
+Microsoft.FSharp.Core.Operators: Single single$W[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Single], T)
+Microsoft.FSharp.Core.Operators: Single single[T](T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T])
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range$W[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T)
Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep$W[T,TStep](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TStep], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T)