Logo F# Compiler Guide

FSharp.Compiler.Service

43.9.300 - 2025-05-13

Nuget

Fixed

Added

Changed

Breaking Changes

43.9.202 - 2025-04-08

Nuget

Fixed

Added

Changed

Breaking Changes

43.9.200 - Unreleased

Fixed

Added

Changed

Breaking Changes

43.9.100 - 2024-11-12

Nuget

Fixed

Added

Changed

Breaking Changes

43.8.400 - 2024-08-13

Nuget

Fixed

Added

Changed

43.8.300 - 2024-05-14

Nuget

Fixed

Added

Changed

43.8.202 - Unreleased

Fixed

nameof Module expressions and patterns are processed to link files in --test:GraphBasedChecking. (PR #16570, PR #16747)

43.8.200 - 2024-02-13

Nuget

Fixed

Added

  • Raise a new error when interfaces with auto properties are implemented on constructor-less types. (PR #16352)
  • Allow usage of [<TailCall>] with older FSharp.Core package versions. (PR #16373)
  • Parser recovers on unfinished as patterns. (PR #16404)
  • Allow type-checking of unfinished object expressions. (PR #16413)
  • Parser recovers on unfinished enum case declarations. (PR #16401)
  • Parser recovers on unfinished record declarations. (PR #16357)
  • MutableKeyword to SynFieldTrivia (PR #16357)
  • Added support for a new parameterless constructor for CustomOperationAttribute, which, when applied, will use method name as keyword for custom operation in computation expression builder. (PR #16475, part of implementation for fslang-suggestions/1250)
  • Compiler service API for getting ranges of unnecessary parentheses. (PR #16079 et seq.)

Changed

  • Speed up unused opens handling for empty results. (PR #16502)

43.8.100 - 2023-11-14

Nuget

Fixed

  • Include the get,set keywords in the range of SynMemberDefn.AutoProperty. (PR #15835)

43.11.100 - Unreleased

Fixed

  • Fix NRE when calling virtual Object methods on value types through inline SRTP functions. (Issue #8098, PR #19511)
  • Fix DU case names matching IWSAM member names no longer cause duplicate property entries. (Issue #14321, PR #19341)
  • Fix DefaultAugmentation(false) duplicate entry in method table. (Issue #16565, PR #19341)
  • Fix abstract event accessors now have SpecialName flag. (Issue #5834, PR #19341)
  • Fix warning 20 ("expression is implicitly ignored") pointing at the wrong range when the last expression in a sequential block (e.g. inside for, while loops) is non-unit. The squiggle now correctly highlights only the offending expression. (Issue #5735, PR #19504)
  • Fix CLIEvent properties to be correctly recognized as events: IsEvent returns true and XmlDocSig uses E: prefix instead of P:. (Issue #10273, PR #18584)
  • Fix extra sequence point at the end of match expressions. (Issue #12052, PR #19278)
  • Fix wrong sequence point range for return/yield/return!/yield! inside computation expressions. (Issue #19248, PR #19278)
  • Fix extra out-of-order sequence point for use in task computation expressions. (Issue #19255, PR #19278)
  • Fix debug points failing to bind in body of [ for x in xs -> body ] comprehensions. (Issue #13504, PR #19278)
  • Fix outref parameter compiled as byref. (Issue #13468, PR #19340)
  • Fix static abstract interface members with byref params. (Issue #18135, PR #19340)
  • Fix codegen to produce IL passing ILVerify: specialized stelem/ldelem for primitives, callvirt→call on value types, castclass at interface join points, filter→catch inside finally handlers, witness field alignment in state machine structs. (PR #19372)
  • Fix object expressions in struct types no longer generate invalid IL with byref fields. (Issue #19068, PR #19339)
  • Avoid duplicate parameter names in closure constructors. (Issue #17692, PR #19339)
  • Improve let-rec codegen: reorder bindings to allocate lambda closures before non-lambda values that reference them. (PR #19339)
  • Fix YieldFromFinal/ReturnFromFinal being incorrectly called in non-tail positions (for, use, use!, try/with handler). (Issue #19402, PR #19403)
  • Fixed how the source ranges of warn directives are reported (as trivia) in the parser output (by not reporting leading spaces). (Issue #19405, PR #19408)
  • Fix UoM value type ToString() returning garbage values when --checknulls+ is enabled, caused by double address-taking in codegen. (Issue #19435, PR #19440)
  • Fix completion inconsistently showing some obsolete members (fields and events) while hiding others (methods and properties). All obsolete members are now consistently hidden by default. (Issue #13512, PR #19506)
  • Fix TypeLoadException when creating delegate with voidptr parameter. (Issue #11132, PR #19338)
  • Suppress tail calls when localloc (NativePtr.stackalloc) is used. (Issue #13447, PR #19338)
  • Fix TypeLoadException in Release builds with inline constraints. (Issue #14492, PR #19338)
  • Fix nativeptr in interfaces leads to TypeLoadException. (Issue #14508, PR #19338)
  • Fix box instruction for literal upcasts. (Issue #18319, PR #19338)
  • Fix Decimal Literal causes InvalidProgramException in Debug builds. (Issue #18956, PR #19338)
  • Fix AttributeUsage.AllowMultiple not being inherited for attributes subclassed in C#. (Issue #17107, PR #19315)

Added

  • Added warning FS3884 when a function or delegate value is used as an interpolated string argument. (PR #19289)
  • Add #version;; directive to F# Interactive to display version and environment information. (Issue #13307, PR #19332)

43.10.300 - Unreleased

Fixed

  • Fix strong name signature size to align with Roslyn for public signing (Issue #17451, PR #19242)
  • Nullness: Fix UoM ToString returning string | null for value types. (Issue #17539, PR #19262)
  • Nullness: Fix pipe operator nullness warning location to point at nullable argument. (Issue #18013, PR #19262)
  • Nullness: Fix false positive warning when passing non-null AllowNullLiteral constructor result. (Issue #18021, PR #19262)
  • Nullness: Allow not null constraint on type extensions. (Issue #18334, PR #19262)
  • Nullness: Simplify tuple null elimination to prevent over-inference of non-null. (Issue #19042, PR #19262)
  • Fixed Find All References not correctly finding active pattern cases in signature files. (Issue #19173, Issue #14969, PR #19252)
  • Fixed Rename not correctly handling operators containing . (e.g., -.-). (Issue #17221, Issue #14057, PR #19252)
  • Fixed Find All References not correctly applying #line directive remapping. (Issue #9928, PR #19252)
  • Fixed SynPat.Or pattern variables (non-left-most) incorrectly classified as bindings instead of uses. (Issue #5546, PR #19252)
  • Fixed Find All References not finding discriminated union types defined inside modules. (Issue #5545, PR #19252)
  • Fixed synthetic event handler values appearing in Find All References results. (Issue #4136, PR #19252)
  • Fixed Find All References not finding all usages of C# extension methods. (Issue #16993, PR #19252)
  • Fixed Find All References on discriminated union cases not including case tester properties (e.g., .IsCase). (Issue #16621, PR #19252)
  • Fixed Find All References on record types not including copy-and-update expressions. (Issue #15290, PR #19252)
  • Fixed Find All References on constructor definitions not finding all constructor usages. (Issue #14902, PR #19252)
  • Fixed Find All References producing corrupted duplicate constructor symbol references with shifted ranges, and removed duplicate attribute symbols from type definition error-reporting. (Issue #19336, PR #19358)
  • Fixed semantic classification regression where copy-and-update record fields were colored as type names, and union case tester dot was colored as union case. (PR #19311)
  • Fix false FS1182 (unused variable) warning for query expression variables used in where, let, join, and select clauses. (Issue #422)
  • Fix FS0229 B-stream misalignment when reading metadata from assemblies compiled with LangVersion < 9.0, introduced by #17706. (PR #19260)
  • Fix FS3356 false positive for instance extension members with same name on different types, introduced by #18821. (PR #19260)
  • Fix graph-based type checking incorrectly resolving dependencies when the same module name is defined across multiple files in the same namespace. (PR #19280)
  • F# Scripts: Fix default reference paths resolving when an SDK directory is specified. (PR #19270)
  • Improve static compilation of state machines. (PR #19297)
  • Fix a bug where let! and use! were incorrectly allowed outside computation expressions. PR #19347
  • Fix TypeLoadException when creating delegate with voidptr parameter. (Issue #11132, PR #19338)
  • Suppress tail calls when localloc (NativePtr.stackalloc) is used. (Issue #13447, PR #19338)
  • Fix TypeLoadException in Release builds with inline constraints. (Issue #14492, PR #19338)
  • Fix nativeptr in interfaces leads to TypeLoadException. (Issue #14508, PR #19338)
  • Fix box instruction for literal upcasts. (Issue #18319, PR #19338)
  • Fix Decimal Literal causes InvalidProgramException in Debug builds. (Issue #18956, PR #19338)

Added

  • FSharpType: add ImportILType (PR #19300)

  • Type checker: recover on argument/overload checking (PR #19314)

  • FSharpType: add more predefined type checks (PR #19325)

  • Introduced a separate NotifyRelatedSymbolUse sink and [<Flags>] RelatedSymbolUseKind enum for related symbol lookups (union case testers, copy-and-update record types). GetUsesOfSymbolInFile and GetSemanticClassification accept an optional relatedSymbolKinds parameter to opt in. (PR #19361)

  • Support #exit;; as alias to #quit;; in F# Interactive. (PR #19329)

  • FCS: capture additional types during analysis (PR #19305)

Changed

  • Centralized product TFM (Target Framework Moniker) into MSBuild props file eng/TargetFrameworks.props. Changing the target framework now only requires editing one file, and it integrates with MSBuild's --getProperty for scripts.
  • Overload resolution results are now cached, providing compile time improvements for code with repeated method calls. (Issue #18807)
  • Symbols: safer qualified name getting (PR #19298)

Breaking Changes

43.10.200 - Unreleased

Fixed

  • Fixed SRTP resolution regression causing FS0030 value restriction errors with FSharpPlus curryN-style patterns in .NET 9 SDK. (PR #19218)
  • Fix FS3261 nullness warning when implementing INotifyPropertyChanged or ICommand CLIEvent properties. (Issue #18361, Issue #18349, PR #19221)
  • Type relations cache: optimize key generation (Issue #19116) (PR #19120)
  • Fixed QuickParse to correctly handle optional parameter syntax with ? prefix, resolving syntax highlighting issues. (Issue #11008753) (PR #19162)
  • Fix --preferreduilang switch leaking into fsi.CommandLineArgs when positioned after script file (PR #19151)
  • Optimize empty string pattern matching to use null-safe .Length check instead of string equality comparison for better performance. (PR #19189)
  • Fixed runtime crash when using interfaces with unimplemented static abstract members as constrained type arguments. (Issue #19184, PR #19185)
  • Fix delegates with [<OptionalArgument>] and caller info attributes failing to compile. (Issue #18868, PR #19069)
  • Type checker: mark generated event tree nodes as synthetic (PR #19213)
  • Nullness: Fix nullness refinement in match expressions to correctly narrow type to non-null after matching null case. (Issue #18488, PR #18852)
  • Scripts: Fix resolving the dotnet host path when an SDK directory is specified. (PR #18960)
  • Fix excessive StackGuard thread jumping (PR #18971)
  • Adjust conservative method-overload duplicate detection rules for nativeptr types (PR #18911)
  • Checking: Fix checking nested fields for records and anonymous (PR #18964)
  • Fix name is bound multiple times is not reported in 'as' pattern (PR #18984)
  • Syntax Tree: fix return type info for let! / and! / use! (PR #19004)
  • Fix: warn FS0049 on upper union case label. (PR #19003)
  • Type relations cache: handle potentially "infinite" types (PR #19010)
  • Disallow recursive structs with lifted type parameters (Issue #18993, PR #19031)
  • Fix units-of-measure changes not invalidating incremental builds. (Issue #19049, PR #19050)
  • Fix race in graph checking of type extensions. (PR #19062)
  • Type relations cache: handle unsolved type variables (Issue #19037) (PR #19040)
  • Fix insertion context for modules with multiline attributes. (Issue #18671, PR #19066)
  • Fix --typecheck-only for scripts stopping after processing #load-ed script (PR #19048)
  • Fix object expressions in struct types generating invalid IL with byref fields causing TypeLoadException at runtime. (Issue #19068, PR #19070)
  • Fix duplicate .cctor issue for discriminated unions with generic statics (Issue #18767, PR #18801)
  • Fix early/unconditional execution of PackageFSharpDesignTimeTools target. (Issue #18924, Issue #12320, PR #18929)

Added

  • Detect and error on static extension members extending types with the same simple name but different namespaces in the same module. (PR #18821)
  • FSharpDiagnostic: add default severity (#19152)
  • Add warning FS3879 for XML documentation comments not positioned as first non-whitespace on line. (PR #18891)
  • FsiEvaluationSession.ParseAndCheckInteraction: add keepAssemblyContents optional parameter (#19155)
  • Add FSharpCodeCompletionOptions (PR #19030)
  • Type checker: recover on checking binding parameter constraints (#19046)
  • Debugger: provide breakpoint ranges for short lambdas (#19067)
  • Add support for triple quoted ASCII byte string (#19182)

Changed

  • Parallel compilation features: ref resolution, graph based checking, ILXGen and optimization enabled by default (PR #18998)
  • Make graph based type checking and parallel optimizations deterministic (PR #19028)
  • Centralize compiler's target framework moniker logic into a single source of truth. (PR #19251)

Breaking Changes

  • SynExpr.LetOrUse holds SynLetOrUse. (PR #19090)
  • SynExprLetOrUseTrivia is now SynLetOrUseTrivia. (PR #19090)
  • SynMemberDefn.LetBindings has trivia. (PR #19090)
  • SynModuleDecl.Let has trivia. (PR #19090)
  • Removed support for .ml and .mli source files. (PR #19143)
  • Removed #light and #indent directives (they are now a no-op; combined with off they give an error). (PR #19143)
  • Removed --light, --indentation-syntax, --no-indendation-syntax, --ml-keywords and --mlcompatibility compiler/fsi flags. (PR #19143)
  • Removed parsing support for long-deprecated ML (non-light) constructs. (PR #19143)

43.10.100 - 2025-11-11

Nuget

Added

  • Symbols: add Mfv.ApparentEnclosingType (PR #17494)
  • Add opt-in warning attribute not valid for union case with fields PR #18532)
  • Add support for when 'T : Enum library-only static optimization constraint. (PR #18546)
  • Add support for tail calls in computation expressions (PR #18804)
  • Add --typecheck-only flag support for F# Interactive (FSI) scripts to type-check without execution. (Issue #18686, PR #18687)
  • Diagnostics: add extended data for 'No constructors' error (PR #18863)
  • FSharpType.Format: support top-level prefix generic types style. (PR #18897)
  • FCS: allow getting captured types (PR #18878)

Fixed

  • Fix F# compiler to prevent tail call emission when pinned locals are present (PR #18893)
  • Fix SignatureHash to include constant values in hash computation (Issue #18758, PR #18771)
  • Fix parsing errors using anonymous records and units of measures (PR #18543)
  • Fix parsing errors using anonymous records and code quotations (PR #18603)
  • Better error message for attribute targets. (PR #18641)
  • Fixed: Allow return, return!, yield, yield! type annotations without parentheses (PR #18533)
  • Allow let!, use!, and! type annotations without requiring parentheses ((PR #18508 and PR #18682))
  • Fix find all references for F# exceptions (PR #18565)
  • Shorthand lambda: fix completion for chained calls and analysis for unfinished expression (PR #18560)
  • Completion: fix previous namespace considered opened PR #18609
  • Fix active pattern typechecking regression. (Issue #18638, PR #18642)
  • Fix nullness warnings when casting non-nullable values to IEquatable<T> to match C# behavior. (Issue #18759, PR #18770)
  • Error on invalid declarations in type definitions.(Issue #10066, PR #18813)
  • Fix IsByRefLikeAttribute types being incorrectly suppressed in completion lists. Types like Span<T> and ReadOnlySpan<T> now appear correctly in IntelliSense. (PR #18784)
  • Fix SRTP nullness constraint resolution for types imported from older assemblies. AmbivalentToNull types now use legacy F# nullness rules instead of always satisfying 'T : null constraints. (Issue #18390, Issue #18344, PR #18785)
  • Fix Show XML doc for enum fields in external metadata (Issue #17939, PR #18800)
  • Fix nullable types formatting in FSharpType.Format and tooltips to include parentheses. (PR #18842)
  • TypeMismatchDiagnosticExtendedData: fix expected and actual types calculation. (PR #18851)
  • Format top-level generic types using a prefix style in inherit/interface declarations and flexible type annotations. (PR #18897)
  • Parser: fix range for computed binding expressions (PR #18903)
  • Tests: set test source for range debug printing (PR #18879)
  • Checker: fix declaring type for abbreviated types extensions (PR #18909)
  • Caches: type subsumption cache key perf regression (Issue #18925 PR #18926)
  • Ensure that line directives are applied to source identifiers (issue #18908, PR #18918)
  • Fix expected and actual types in ErrorFromAddingTypeEquation message and extended diagnostic data. (PR #18915)
  • Editor: Fix Record fields completion in update record with partial field name. (PR #18946)

Changed

  • Use errorR instead of error in CheckDeclarations.fs when possible. (PR #18645)
  • Parser: Capture named fields block separators. (PR #18857)
  • Type checker: use inner expr range in upcast constraints errors (PR #18850)
  • Import IEnumerable as seq. (PR #18865)

Breaking Changes

  • Scoped Nowarn: Add the #warnon compiler directive (Language suggestion #278, RFC FS-1146 PR, PR #18049 and PR #18637)
  • Simplify creation of FSharpDiagnostics. In a few cases, errors without ranges were assigned to the currently checked file, while in other cases they carried an empty range. The latter is now true in all cases. In a few cases, ranges at eof were corrected, while in others they were not. They are now always left uncorrected. This is a prerequisit for #18553. (PR #18610).
  • SynExprRecordField now includes a range field (PR #18617)
  • Mark Range.Zero as obsolete in favor of Range.range0 (PR #18664)
  • Use Synbinding to model and! (PR #18805)
  • Redesign #line processing. The original positions (unaffected by #line directives) are now kept in the AST, and __LINE__ and __SOURCE_LINE__ show the original line numbers / file names. However, all diagnostics and debug information stays the same (shows the position transformed by the #line directives). (Issue #18553, PR #18699, PR 18828, PR 18829)
  • Unify let, let!, use and use! AST representation. (PR #18825)[^1]

Migration Guidance for AST Users

Note: The unified AST introduces two new boolean fields:

  • isFromSource: Indicates if the binding comes from user-written code (true) or is compiler-generated (false)
  • isBang: Distinguishes computation expression bindings (let!/use! = true) from regular bindings (let/use = false)

1. Pattern Matching Updates

Before:

match expr with
| SynExpr.LetOrUse(isRec, isUse, bindings, body, range, trivia) ->
    // Handle regular let/use
| SynExpr.LetOrUseBang(spBind, isUse, isFromSource, pat, rhs, andBangs, body, range, trivia) ->
    // Handle let!/use!

After:

match expr with
| SynExpr.LetOrUse(isRec, isUse, isFromSource, isBang, bindings, body, range, trivia) ->
    if isBang then
        // This is a let!/use! expression
        match bindings with
        | firstBinding :: andBangs ->
            match firstBinding with
            | SynBinding(headPat = pat; expr = rhs) ->
                // pat and rhs extracted from first binding
                // andBangs contains the and! bindings
        | [] -> // error case
    else
        // This is a regular let/use expression

2. Construction Updates

Before:

// Creating a let! expression
SynExpr.LetOrUseBang(
    bindDebugPoint,
    false,  // isUse
    true,   // isFromSource
    pat,
    rhsExpr,
    andBangs,
    bodyExpr,
    range,
    trivia
)

After:

// Creating a let! expression
let firstBinding = SynBinding(
    accessibility = None,
    kind = SynBindingKind.Normal,
    isInline = false,
    isMutable = false,
    attributes = [],
    xmlDoc = PreXmlDoc.Empty,
    valData = SynInfo.emptySynValData,
    headPat = pat,           // Pattern moved here
    returnInfo = None,
    expr = rhsExpr,          // RHS moved here
    range = range,
    debugPoint = bindDebugPoint,  // Debug point moved here
    trivia = bindingTrivia
)
SynExpr.LetOrUse(
    false,  // isRecursive
    false,  // isUse
    true,   // isFromSource
    true,   // isBang (indicates let!)
    firstBinding :: andBangs,  // All bindings in single list
    bodyExpr,
    range,
    trivia
)

3. Common Migration Patterns

Checking for computation expressions:

// Before
match expr with
| SynExpr.LetOrUseBang _ -> true
| _ -> false

// After
match expr with
| SynExpr.LetOrUse(isBang = true) -> true
| _ -> false

Extracting pattern and expression from let!:

// Before
| SynExpr.LetOrUseBang(_, _, _, pat, rhs, _, _, _, _) ->
    processBinding pat rhs

// After
| SynExpr.LetOrUse(isBang = true; bindings = binding :: _) ->
    match binding with
    | SynBinding(headPat = pat; expr = rhs) ->
        processBinding pat rhs
    | _ -> // error

Processing and! bindings:

// Before
| SynExpr.LetOrUseBang(_, _, _, firstPat, firstRhs, andBangs, _, _, _) ->
    processFirst firstPat firstRhs
    for andBang in andBangs do
        processAndBang andBang

// After
| SynExpr.LetOrUse(isBang = true; bindings = bindings) ->
    match bindings with
    | first :: rest ->
        processBinding first
        for andBang in rest do
            processAndBang andBang
    | [] -> // error

[^1]: See Migration Guidance for AST Users section for detailed information on how to update your code to work with the unified AST representation.

namespace System
namespace System.IO
namespace System.Xml
namespace System.Xml.XPath
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>
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
val fcsMajorVersion: string
val versionPropsDoc: System.Xml.Linq.XDocument
(extension) System.Xml.Linq.XNode.XPathSelectElement(expression: string) : System.Xml.Linq.XElement
(extension) System.Xml.Linq.XNode.XPathSelectElement(expression: string, resolver: System.Xml.IXmlNamespaceResolver) : System.Xml.Linq.XElement
val nugetPackage: string
val availableNuGetVersions: Set<string>
val getAvailableNuGetVersions: packageName: string -> Set<string>
 Find all published versions of a package on NuGet
val processFolder: path: string -> processFile: (string -> string) -> string
 Process all MarkDown files from the given release folder
val file: string
val versionInFileName: string
Path.GetFileNameWithoutExtension(path: string) : string
Path.GetFileNameWithoutExtension(path: System.ReadOnlySpan<char>) : System.ReadOnlySpan<char>
val versionParts: string array
System.String.Split(separator: System.ReadOnlySpan<char>) : string array
   (+0 other overloads)
System.String.Split( separator: char array) : string array
   (+0 other overloads)
System.String.Split(separator: string array, options: System.StringSplitOptions) : string array
   (+0 other overloads)
System.String.Split(separator: string, ?options: System.StringSplitOptions) : string array
   (+0 other overloads)
System.String.Split(separator: char array, options: System.StringSplitOptions) : string array
   (+0 other overloads)
System.String.Split(separator: char array, count: int) : string array
   (+0 other overloads)
System.String.Split(separator: char, ?options: System.StringSplitOptions) : string array
   (+0 other overloads)
System.String.Split(separator: string array, count: int, options: System.StringSplitOptions) : string array
   (+0 other overloads)
System.String.Split(separator: string, count: int, ?options: System.StringSplitOptions) : string array
   (+0 other overloads)
System.String.Split(separator: char array, count: int, options: System.StringSplitOptions) : string array
   (+0 other overloads)
val version: string
val title: string
member Set.Contains: value: 'T -> bool
val tryGetReleaseDate: packageName: string -> version: string -> string option
 Try and find the publish date on NuGet
union case Option.None: Option<'T>
union case Option.Some: Value: 'T -> Option<'T>
val d: string
val nugetBadge: string
Multiple items
type String = interface seq<char> interface IEnumerable interface ICloneable interface IComparable interface IComparable<string> interface IConvertible interface IEquatable<string> interface IParsable<string> interface ISpanParsable<string> new: value: nativeptr<char> -> unit + 8 overloads ...
<summary>Represents text as a sequence of UTF-16 code units.</summary>

--------------------
System.String(value: nativeptr<char>) : System.String
System.String(value: char array) : System.String
System.String(value: System.ReadOnlySpan<char>) : System.String
System.String(value: nativeptr<sbyte>) : System.String
System.String(c: char, count: int) : System.String
System.String(value: nativeptr<char>, startIndex: int, length: int) : System.String
System.String(value: char array, startIndex: int, length: int) : System.String
System.String(value: nativeptr<sbyte>, startIndex: int, length: int) : System.String
System.String(value: nativeptr<sbyte>, startIndex: int, length: int, enc: System.Text.Encoding) : System.String
field string.Empty: string
val content: string
type File = static member AppendAllBytes: path: string * bytes: byte array -> unit + 1 overload static member AppendAllBytesAsync: path: string * bytes: byte array * ?cancellationToken: CancellationToken -> Task + 1 overload static member AppendAllLines: path: string * contents: string seq -> unit + 1 overload static member AppendAllLinesAsync: path: string * contents: string seq * encoding: Encoding * ?cancellationToken: CancellationToken -> Task + 1 overload static member AppendAllText: path: string * contents: ReadOnlySpan<char> -> unit + 3 overloads static member AppendAllTextAsync: path: string * contents: ReadOnlyMemory<char> * encoding: Encoding * ?cancellationToken: CancellationToken -> Task + 3 overloads static member AppendText: path: string -> StreamWriter static member Copy: sourceFileName: string * destFileName: string -> unit + 1 overload static member Create: path: string -> FileStream + 2 overloads static member CreateSymbolicLink: path: string * pathToTarget: string -> FileSystemInfo ...
<summary>Provides static methods for the creation, copying, deletion, moving, and opening of a single file, and aids in the creation of <see cref="T:System.IO.FileStream" /> objects.</summary>
File.ReadAllText(path: string) : string
File.ReadAllText(path: string, encoding: System.Text.Encoding) : string
type Markdown = static member Convert: markdown: string * renderer: IMarkdownRenderer * ?pipeline: MarkdownPipeline * ?context: MarkdownParserContext -> obj static member Normalize: markdown: string * ?options: NormalizeOptions * ?pipeline: MarkdownPipeline * ?context: MarkdownParserContext -> string + 1 overload static member Parse: markdown: string * ?trackTrivia: bool -> MarkdownDocument + 1 overload static member ToHtml: markdown: string * ?pipeline: MarkdownPipeline * ?context: MarkdownParserContext -> string + 3 overloads static member ToPlainText: markdown: string * writer: TextWriter * ?pipeline: MarkdownPipeline * ?context: MarkdownParserContext -> MarkdownDocument + 1 overload static member Version: string
<summary> Provides methods for parsing a Markdown string to a syntax tree and converting it to other formats. </summary>
Markdown.ToHtml(document: Syntax.MarkdownDocument, ?pipeline: MarkdownPipeline) : string
Markdown.ToHtml(document: Syntax.MarkdownDocument, writer: TextWriter, ?pipeline: MarkdownPipeline) : unit
Markdown.ToHtml(markdown: string, ?pipeline: MarkdownPipeline, ?context: MarkdownParserContext) : string
Markdown.ToHtml(markdown: string, writer: TextWriter, ?pipeline: MarkdownPipeline, ?context: MarkdownParserContext) : Syntax.MarkdownDocument
val transformH3: version: string -> input: string -> string
 In order for the heading to appear in the page content menu in fsdocs,
 they need to follow a specific HTML structure.

Type something to start searching.