FSharp.Core
11.0.100 - Unlisted on NuGet
Fixed
- Mirror compiler-semantic attributes (e.g.
[<NoDynamicInvocation>],[<Experimental>]) in.fsisignature files to match.fsimplementations. (Issue #19560, PR #19880) - Fix
Array2DAOT compatibility:create,initandrebaseno longer emitIL3050;map,mapiandcopyno longer emit it onnet10.0; the*Basedoperations now warn at the call site before the runtime failure they already had. (Language Suggestion #1454, PR #20338) - Fix
Array.exists2documentation examples to use equal-length arrays; the previous examples would throwArgumentExceptionat runtime instead of returning the documentedfalse/truevalues. (PR #19672) - Move
Async.StartChildto the "Starting Async Computations" docs category alongsideAsync.StartChildAsTask. (Issue #19667) - Add
InlineIfLambdatoArray.init(PR #19869) - Fix printf handling of -0.0 (negative zero) values for float, float32, and decimal values (Issue #15557 and Issue #15558, PR #18147)
Added
- Add
Unchecked.withNull, an interop escape hatch that re-types any'Tto'T | nullwithout the usualnot null/not structconstraints, so unconstrained C# nullable-generic APIs (e.g.T? M<T>()) can be implemented and consumed from F#. (Issue #17734, PR #20232) - Added generic
printandprintnfunctions ('T -> unit) toExtraTopLevelOperatorsfor simple value printing to stdout. (RFC FS-1125, PR #19265) - Ship
FSharp.Corewith an additionalnet10.0target framework (next tonetstandard2.0andnetstandard2.1). Thenet-TFM assembly is public-surface-identical to thenetstandard2.1one; the target version is a pinned, deliberately advanced knob. (PR #20229) - Add
Async.Await, mirroringAsync.AwaitTasksemantics, but elides egregiousAggregateExceptionwrapping. IncludesValueTasksupport, and a SRTP-based overload accepting any Task-like value that supports theGetAwaiterprotocol. (Language Suggestion #840, PR #19785) Async.RunSynchronouslyImmediate: runs work on the calling thread until the first asynchronous suspension (as opposed toRunSynchronously, which immediately offloads if not on a background and/or threadpool thread). (Issue #1042, PR #19804)- Added
AllowOverloadOnReturnTypeAttribute: applying it to a method causes its return type to be considered during overload resolution, enabling overloads that differ only by return type. (fslang-suggestions#820, PR #19602) - Added modules for
Async,TaskandValueTaskwith consistentresult,map,bind,ignore,catchWith,catch, andemptyfunctions (LanguageSuggestion #1466, PR #19844) - Added conversion functions
Task.ofValueTaskandValueTask.ofTask. (LanguageSuggestion #1466, PR #19844) - Add
Async.StartTaskImmediate: passes the ambientAsync.CancellationTokento a task factory, then await the result usingAsync.Awaitsemantics. Overloads forTask,Task<'T>,ValueTask,ValueTask<'T>and task-like.GetAwaiter()(via SRTP). (Language Suggestion #1284, PR #20258) - Add
Async.RunSynchronouslyImmediate: runs work on the calling thread until the first asynchronous suspension (as opposed toRunSynchronously, which immediately offloads if not on a background and/or threadpool thread). (Issue #1042, PR #19804) - Add modules for
Async,TaskandValueTaskwith consistentresult,map,bind,ignore,catchWith,catch, andemptyfunctions (LanguageSuggestion #1466, PR #19844) - Add conversion functions
Task.ofValueTaskandValueTask.ofTask. (LanguageSuggestion #1466, PR #19844) - Add
parallelLimittoTaskandAsyncmodules, for bounded-parallelism execution of async/task computations, flowing cancellation and returning the results as an array. (LanguageSuggestion #1467, PR #20294) - Add
parallelDoLimittoTaskandAsyncmodules, for bounded-parallelism execution of async/task computations, flowing cancellation. (LanguageSuggestion #1467, PR #20294) - Add
sequentialDotoTaskandAsync, running computations one at a time, flowing cancellation, without yielding an egregiousunit[]. (LanguageSuggestion #1467, PR #20294) - Add
Task.sequential, running task computations one at a time, flowing cancellation and returning the results as an array. (LanguageSuggestion #1467, PR #20294) - Add
Task.startAsyncImmediate, starting anAsync<'T>on the current thread and returning aTask<'T>, flowing cancellation. (LanguageSuggestion #1467, PR #20294)
Changed
- Deduplicate repeated XML documentation (sort stability/complexity,
Parallel.For, dynamic entry points) via the compile-time<include>tag; generated FSharp.Core.xml is unchanged. (PR #20231) - Remove trailing whitespace from source files. No functional change: whitespace inside string literals and inactive
#ifregions is preserved. (PR #20355)
10.1.300 - 2026-05-12
Fixed
- Optimize Set.intersect performance symmetry and preserve identity from the first set argument. (PR #19291) (Fixes #19139)
- Fix anonymous record field ordering in LINQ expression conversion to produce consistent expression trees regardless of field declaration order. (Issue #11131, Issue #15648)
- Fix array indexing in LINQ expressions to generate proper array index expressions instead of GetArray method calls, enabling LINQ providers like Azure Cosmos DB to translate array access. (Issue #16918)
- Fix tuple join conditions and groupBy operations to properly compare tuple keys using structural equality. AnonymousObject types now implement Equals and GetHashCode, enabling inline tuple joins like
join b on ((a.Id1, a.Id2) = (b.Id1, b.Id2))to work correctly. (Issue #7885, Issue #47) - Fix tuple/multi-value projections in queries to use Queryable.Select instead of Enumerable.Select when the source is IQueryable, preserving query composition and enabling async operations like ToListAsync() in Entity Framework Core. (Issue #3782, Issue #15133)
- Fix EvaluateQuotation to handle Sequential expressions, void method calls (unit return), and other patterns that were previously throwing NotSupportedException. Also properly handles unit-returning expressions by using Action delegates instead of Func delegates. (Issue #19099)
- Fix query conditionals without else branch (if-then only) that were causing type mismatch errors. Now properly extracts element type from IQueryable for creating empty sequences. (Issue #3445)
- Fix
Seq.emptyrendering as"EmptyEnumerable"in serializers by delegating toSystem.Linq.Enumerable.Empty<'T>()instead of using a custom DU type. (Issue #17864, PR #19317) - Fix
seq { try/with }handler body executing twice when source throws immediately and handler yields nothing. (Issue #19660, PR #19661) - Ensure culture-independent parsing of .NET-style interpolated string holes. (Issue #19367, PR #19370)
Added
- Add
List.partitionWith,Array.partitionWith,Set.partitionWith, andArray.Parallel.partitionWithfunctions that partition a collection using a function that returnsChoice<'T1, 'T2>. (Language Suggestion #1119)
Changed
- Added complexity documentation (Big-O notation) to all 462 functions across Array, List, Seq, Map, and Set collection modules. (PR #19240)
Breaking Changes
10.1.201 - 2026-03-12
Fixed
- Fix IL2091 trimming warning in
LazyExtensions.Createby addingDynamicallyAccessedMembersattribute to the generic type parameter. (Issue #17356, PR #18302)
Changed
- Added
not nullconstraints toIDelegateEvent<'Delegate>,IEvent<'Delegate,'Args>,DelegateEvent<'Delegate>, andEvent<'Delegate,'Args>types to prevent spurious nullness warnings when implementing CLIEvent properties. (Issue #18361, Issue #18349, PR #19221) - Renamed deprecated
orand&operators, but keeping the original compiled names for binary compatibility. (PR #19143)
10.0.100 - 2025-11-11
Fixed
- Correct a typo in docs for List.sort (PR #18938)
Added
- Enable more
stringoptimizations by addingwhen 'T : Enumlibrary-only library-only static optimization constraint. (PR #18546)
Changed
- Random functions support for zero element chosen/sampled (PR #18568)
- Optimize array slicing performance. (PR #18778)
Breaking Changes
- 1D array slicing now returns an empty array singleton instead of allocating a new array when the result is empty. (PR #18778)
9.0.300 - 2025-05-13
Fixed
- Modified the behavior of
Array.insertManyAtto return a copy of the original array when inserting an empty array. (PR #18353)
Added
- Added nullability annotations to
.Usingbuilder method forasyncandtaskbuilders (PR #18292) - Support for
and!inTaskBuilder(LanguageSuggestion #1363, PR #18451)
Changed
Breaking Changes
- Struct unions with overlapping fields now generate mappings needed for reading via reflection (Issue #18121, PR #18274). Previous versions of FSharp.Core returned incomplete mapping between fields and cases, these older fslib versions will now report an exception.
9.0.201 - 2025-02-11
Fixed
- Fix exception on Post after MailboxProcessor was disposed (Issue #17849, PR #17922)
- Fix missing null annotation in Async.SwitchToContext (Issue #18055, PR #18059)
Added
Changed
- String function changed to guarantee a non-null string return type (PR #17809)
- Add Parameters as valid target for the Struct attribute (Language suggestion #1136, PR #18098)
Breaking Changes
9.0.101 - 2025-01-14
FSharp.Core 9.0.101 did not change compared to version 9.0.100. Below are the changes for FSharp.Core 9.0.100
Fixed
- Struct UnionCase doesn't seem to be a valid target for the DefaultAugmentationAttribute (Issue #17499, PR #17502)
Added
- Enable C# collection expression support for F# lists & sets. (Language suggestion #1355, RFC FS-1145 (PR#776), PR #17359)
- Add module functions for converting between
'T optionand'T voption. (PR #17436)
Changed
- Change compiler default setting realsig+ when building assemblies (Issue #17384, PR #17378)
- Change compiler default setting for compressedMetadata (Issue #17379, PR #17383)
- Enable FSharp 9.0 Language Version (Issue #17497), PR))
- Struct UnionCase doesn't seem to be a valid target for the DefaultAugmentationAttribute (Issue #17499, PR #17502)
Breaking Changes
9.0.100 - 2024-11-12
Fixed
- Struct UnionCase doesn't seem to be a valid target for the DefaultAugmentationAttribute (Issue #17499, PR #17502)
Added
- Enable C# collection expression support for F# lists & sets. (Language suggestion #1355, RFC FS-1145 (PR#776), PR #17359)
- Add module functions for converting between
'T optionand'T voption. (PR #17436)
Changed
- Change compiler default setting realsig+ when building assemblies (Issue #17384, PR #17378)
- Change compiler default setting for compressedMetadata (Issue #17379, PR #17383)
- Enable FSharp 9.0 Language Version (Issue #17497), PR))
- Struct UnionCase doesn't seem to be a valid target for the DefaultAugmentationAttribute (Issue #17499, PR #17502)
Breaking Changes
8.0.400 - 2024-08-13
Fixed
Added
Changed
- Cache delegate in query extensions. (PR #17130)
- Update
AllowNullLiteralAttributeto also useAttributeTargets.Interface(PR #17173) - Update
StructAttributeto also useAttributeTargets.Class(PR #17207)
Breaking Changes
- Fixed argument exception throwing inconsistency - accessing an out-of-bounds collection index will now throw
ArgumentOutOfRangeExceptioninstead ofArgumentException(#17328)
8.0.300 - 2024-05-14
Added
- Minor tweaks to inline specifications to support Visibility PR (PR #15484, #PR 16427
- Optimize equality in generic contexts. (PR #16615)
- Add a constructor for
MailboxProcessorwith a flag denoting that an exception will be thrown whenPostis called after theMailboxProcessorhas been disposed. (PR #13036)
Fixed
- Preserve original stack traces in resumable state machines generated code if available. (PR #16568)
- Fix receiving and processing mailbox after Dispose. (PR #13036)
- Enforce AttributeTargets on structs and classes. Also update
RequireQualifiedAccessAttributeandAutoOpenAttributeto useAttributeTargets.Struct(PR #16790) - Enforce AttributeTargets on enums. Also update
RequireQualifiedAccessAttributeto useAttributeTargets.Enum(PR #16887) - Enforce AttributeTargets on delegates. Also update
ReflectedDefinitionAttributeto useAttributeTargets.Delegate(PR #16891)
8.0.200 - 2024-02-13
Added
- More inlines for Result module. (PR #16106)
- Added a new parameterless constructor for
CustomOperationAttribute(PR #16475, part of implementation for fslang-suggestions/1250)
namespace System
namespace System.IO
namespace Markdig
module Common
val path: string
type Path =
static member ChangeExtension: path: string * extension: string -> string
static member Combine: path1: string * path2: string -> string + 4 overloads
static member EndsInDirectorySeparator: path: ReadOnlySpan<char> -> bool + 1 overload
static member Exists: path: string -> bool
static member GetDirectoryName: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetExtension: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetFileName: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetFileNameWithoutExtension: path: ReadOnlySpan<char> -> ReadOnlySpan<char> + 1 overload
static member GetFullPath: path: string -> string + 1 overload
static member GetInvalidFileNameChars: unit -> char array
...
<summary>Performs operations on <see cref="T:System.String" /> instances that contain file or directory path information. These operations are performed in a cross-platform manner.</summary>
<summary>Performs operations on <see cref="T:System.String" /> instances that contain file or directory path information. These operations are performed in a cross-platform manner.</summary>
Path.Combine(paths: System.ReadOnlySpan<string>) : string
Path.Combine( paths: string array) : string
Path.Combine(path1: string, path2: string) : string
Path.Combine(path1: string, path2: string, path3: string) : string
Path.Combine(path1: string, path2: string, path3: string, path4: string) : string
Path.Combine( paths: string array) : string
Path.Combine(path1: string, path2: string) : string
Path.Combine(path1: string, path2: string, path3: string) : string
Path.Combine(path1: string, path2: string, path3: string, path4: string) : string
val renderPackageReleaseNotes: packageName: string -> path: string -> minPackageVersion: System.Version -> packageVersionOfNotes: (System.Version -> System.Version) -> upcomingVersion: System.Version -> string
Renders the release notes of a package: one section per notes file in `path`, ordered by
package version, newest first. Which package versions belong to a notes file is looked up
from the source commit of each package on NuGet, from `minPackageVersion` on.
Notes without a package are either the upcoming release, placed at the top as `upcomingVersion`,
or an old servicing version that never shipped, placed where `packageVersionOfNotes` puts it.
Renders the release notes of a package: one section per notes file in `path`, ordered by
package version, newest first. Which package versions belong to a notes file is looked up
from the source commit of each package on NuGet, from `minPackageVersion` on.
Notes without a package are either the upcoming release, placed at the top as `upcomingVersion`,
or an old servicing version that never shipped, placed where `packageVersionOfNotes` puts it.
Multiple items
type Version = interface ICloneable interface IComparable interface IComparable<Version> interface IEquatable<Version> interface IFormattable interface ISpanFormattable interface IUtf8SpanFormattable interface IUtf8SpanParsable<Version> new: unit -> unit + 4 overloads member Clone: unit -> obj ...
<summary>Represents the version number of an assembly, operating system, or the common language runtime. This class cannot be inherited.</summary>
--------------------
System.Version() : System.Version
System.Version(version: string) : System.Version
System.Version(major: int, minor: int) : System.Version
System.Version(major: int, minor: int, build: int) : System.Version
System.Version(major: int, minor: int, build: int, revision: int) : System.Version
type Version = interface ICloneable interface IComparable interface IComparable<Version> interface IEquatable<Version> interface IFormattable interface ISpanFormattable interface IUtf8SpanFormattable interface IUtf8SpanParsable<Version> new: unit -> unit + 4 overloads member Clone: unit -> obj ...
<summary>Represents the version number of an assembly, operating system, or the common language runtime. This class cannot be inherited.</summary>
--------------------
System.Version() : System.Version
System.Version(version: string) : System.Version
System.Version(major: int, minor: int) : System.Version
System.Version(major: int, minor: int, build: int) : System.Version
System.Version(major: int, minor: int, build: int, revision: int) : System.Version
val id: x: 'T -> 'T
val upcomingFSharpVersion: System.Version
The F# version main is at, and the FCS version that goes with it
The F# version main is at, and the FCS version that goes with it
F# Compiler Guide