F# Language Specification
This is an initiative to create a more complete and community-maintainable F# spec.
This will be no small task, but we believe it is worthwhile and we count on community contributions.
We foresee three phases:
- Convert the latest official spec to markdown and create the structure and tools to make it community-maintainable. This is done.
- Add the post-4.1 features as documented in the RFCs to the spec. Our goal: a complete F# 10 spec.
- Make spec update part of new feature development so that an up-to-date spec can be released with every new major compiler release.
The spec is in the end closely coupled to the language design and therefore needs a) strong community contributions and b) a clearly defined final responsibility, which will be similar to the one of the language design process.
We foresee the following types of contributions:
- Issues and/or PRs for bug fixes.
- PRs for integration of an accepted and implemented RFC.
- Issues for proposing and discussing smaller or larger improvements to the spec
- PRs for such improvements, once the discussion converges and/or is decided by the team in charge
All PRs need to be accepted by two team reviewers for merging.
Version | Feature ID | Feature Description | Link | Status |
---|---|---|---|---|
F# 4.0 | N/A | Auto Quotation | AutoQuotationDesignAndSpec.md | |
F# 4.0 | N/A | Class Names As Functions | ClassNamesAsFunctionsDesignAndSpec.md | |
F# 4.0 | N/A | Core Library Functions | CoreLibraryFunctions.md | |
F# 4.0 | N/A | Extended If Grammar | ExtendedIfGrammarDesignAndSpec.md | |
F# 4.0 | N/A | Extension Property Initializers | ExtensionPropertyInitializersDesignAndSpec.md | |
F# 4.0 | N/A | List, Seq, Array Additions | ListSeqArrayAdditions.md | |
F# 4.0 | N/A | Microsoft Optional | MicrosoftOptionalDesignAndSpec.md | |
F# 4.0 | N/A | Multi-Interface Instantiation | MultiInterfaceInstantiationDesignAndSpec.md | |
F# 4.0 | N/A | Non-Null Provided Types | NonNullProvidedTypesDesignAndSpec.md | |
F# 4.0 | N/A | Printf Units of Measure | PrintfUnitsOfMeasureDesignAndSpec.md | |
F# 4.0 | N/A | Static Method Arguments | StaticMethodArgumentsDesignAndSpec.md | |
F# 4.1 | FS-1002 | Cartesian Product for Collections | FS-1002-cartesian-product-for-collections.md | |
F# 4.1 | FS-1004 | Result Type | FS-1004-result-type.md | |
F# 4.1 | FS-1005 | Underscores in Numeric Literals | FS-1005-underscores-in-numeric-literals.md | |
F# 4.1 | FS-1006 | Struct Tuples | FS-1006-struct-tuples.md | |
F# 4.1 | FS-1007 | Additional Option Module Functions | FS-1007-additional-Option-module-functions.md | |
F# 4.1 | FS-1008 | Struct Records | FS-1008-struct-records.md | |
F# 4.1 | FS-1009 | Mutually Referential Types and Modules in Single Scope | FS-1009-mutually-referential-types-and-modules-single-scope.md | |
F# 4.1 | FS-1010 | Add Map.count | FS-1010-add-map-count.md | |
F# 4.1 | FS-1012 | Caller Info Attributes | FS-1012-caller-info-attributes.md | |
F# 4.1 | FS-1013 | Enable Reflection Functionality on Portable Profiles | FS-1013-enable-reflection-functionality-on-portable-profiles.md | |
F# 4.1 | FS-1014 | Struct Discriminated Unions | FS-1014-struct-discriminated-unions.md | |
F# 4.1 | FS-1015 | Support for fixed | FS-1015-support-for-fixed.md | |
F# 4.1 | FS-1016 | Unreserve Keywords | FS-1016-unreserve-keywords.md | |
F# 4.1 | FS-1017 | Fix SRTP Constraint Parsing | FS-1017-fix-srtp-constraint-parsing.md | |
F# 4.1 | FS-1018 | Adjust Extensions Method Scope | FS-1018-adjust-extensions-method-scope.md | |
F# 4.1 | FS-1019 | Implicitly Add the Module Suffix | FS-1019-implicitly-add-the-module-suffix.md | |
F# 4.1 | FS-1020 | ByRef Returns | FS-1020-byref-returns.md | |
F# 4.1 | FS-1025 | Improve Record Type Inference | FS-1025-improve-record-type-inference.md | |
F# 4.1 | FS-1027 | Complete Optional DefaultParameterValue | FS-1027-complete-optional-defaultparametervalue.md | |
F# 4.1 | FS-1029 | Implement IReadOnlyCollection in list | FS-1029-Implement IReadOnlyCollection in list.md | |
F# 4.1 | FS-1040 | Enum Match | FS-1040-enum-match.md | |
F# 4.5 | FS-1047 | Match Bang | FS-1047-match-bang.md | |
F# 4.5 | FS-1053 | Span | FS-1053-span.md | |
F# 4.5 | FS-1054 | Undent List Args | FS-1054-undent-list-args.md | |
F# 4.5 | FS-1055 | Subsumption for Yield in Sequence Expression | FS-1055-subsumption-for-yield-in-sequence-expression.md | |
F# 4.5 | FS-1058 | Make Enum Cases Public | FS-1058-make-enum-cases-public.md | |
F# 4.6 | FS-1030 | Anonymous Records | FS-1030-anonymous-records.md | |
F# 4.7 | FS-1046 | Wildcard Self Identifiers | FS-1046-wildcard-self-identifiers.md | |
F# 4.7 | FS-1069 | Implicit Yields | FS-1069-implicit-yields.md | |
F# 4.7 | FS-1070 | Offside Relaxations | FS-1070-offside-relaxations.md | |
F# 5.0 | FS-1001 | String Interpolation | FS-1001-StringInterpolation.md | |
F# 5.0 | FS-1003 | Nameof Operator | FS-1003-nameof-operator.md | |
F# 5.0 | FS-1031 | Allow Implementing Same Interface at Different Generic Instantiations | FS-1031-Allow implementing the same interface at different generic instantiations in the same type.md | |
F# 5.0 | FS-1063 | Support LetBang and AndBang for Applicative Functors | FS-1063-support-letbang-andbang-for-applicative-functors.md | |
F# 5.0 | FS-1068 | Open Type Declaration | FS-1068-open-type-declaration.md | |
F# 5.0 | FS-1071 | Witness Passing Quotations | FS-1071-witness-passing-quotations.md | |
F# 5.0 | FS-1074 | Default Interface Member Consumption | FS-1074-default-interface-member-consumption.md | |
F# 5.0 | FS-1075 | Nullable Interop | FS-1075-nullable-interop.md | |
F# 5.0 | FS-1077 | 3D/4D Fixed Index Slicing | FS-1077-3d-4d-fixed-index-slicing.md | |
F# 5.0 | FS-1077 | Tolerant Slicing | FS-1077-tolerant-slicing.md | |
F# 5.0 | FS-1080 | Float32 Without Dot | FS-1080-float32-without-dot.md | |
F# 5.0 | FS-1082 | Uint Type Abbreviation | FS-1082-uint-type-abbreviation.md | |
F# 5.0 | FS-1085 | Nameof Pattern | FS-1085-nameof-pattern.md | |
F# 5.0 | FS-1089 | Allow String Everywhere | FS-1089-allow-string-everywhere.md | |
F# 6.0 | FS-1039 | Struct Representation for Active Patterns | FS-1039-struct-representation-for-active-patterns.md | |
F# 6.0 | FS-1056 | Allow Custom Operation Overloads | FS-1056-allow-custom-operation-overloads.md | |
F# 6.0 | FS-1087 | Resumable Code | FS-1087-resumable-code.md | |
F# 6.0 | FS-1091 | Extend Units of Measure | FS-1091-Extend-Units-of-Measure.md | |
F# 6.0 | FS-1093 | Additional Conversions | FS-1093-additional-conversions.md | |
F# 6.0 | FS-1097 | Task Builder | FS-1097-task-builder.md | |
F# 6.0 | FS-1098 | Inline If Lambda | FS-1098-inline-if-lambda.md | |
F# 6.0 | FS-1099 | List Collector | FS-1099-list-collector.md | |
F# 6.0 | FS-1100 | Printf Binary | FS-1100-Printf-binary.md | |
F# 6.0 | FS-1102 | Discards on Use Bindings | FS-1102-discards-on-use-bindings.md | |
F# 6.0 | FS-1104 | Struct Representations | FS-1104-struct-representations.md | |
F# 6.0 | FS-1105 | Non-variable Patterns to the Right of As Patterns | FS-1105-Non-variable-patterns-to-the-right-of-as-patterns.md | |
F# 6.0 | FS-1107 | Allow Attributes After the Module Keyword | FS-1107-Allow-attributes-after-the-module-keyword.md | |
F# 6.0 | FS-1108 | Undentation Frenzy | FS-1108-undentation-frenzy.md | |
F# 6.0 | FS-1109 | Additional Intrinsics for the NativePtr Module | FS-1109-Additional-intrinsics-for-the-NativePtr-module.md | |
F# 6.0 | FS-1110 | Index Syntax | FS-1110-index-syntax.md | |
F# 6.0 | FS-1111 | RefCell Op Information Messages | FS-1111-refcell-op-information-messages.md | |
F# 6.0 | FS-1113 | Insert Remove Update Functions | FS-1113-insert-remove-update-functions.md | |
F# 6.0 | FS-1114 | ML Compat Revisions | FS-1114-ml-compat-revisions.md | |
F# 7.0 | FS-1024 | Simplify Constrained Call Syntax | FS-1024-simplify-constrained-call-syntax.md | |
F# 7.0 | FS-1083 | SRTP Type No Whitespace | FS-1083-srtp-type-no-whitespace.md | |
F# 7.0 | FS-1096 | Map Min Max KeyValue | FS-1096-map-min-max-keyvalue.md | |
F# 7.0 | FS-1123 | Result Module Parity with Option | FS-1123-result-module-parity-with-option.md | |
F# 7.0 | FS-1124 | Interfaces with Static Abstract Members | FS-1124-interfaces-with-static-abstract-members.md | |
F# 7.0 | FS-1126 | Allow Lower Case DU Cases when RequireQualifiedAccess is Specified | FS-1126-allow-lower-case-du-cases when-require-qualified-access-is specified.md | |
F# 7.0 | FS-1127 | Init Only and Required Properties | FS-1127-init-only-and-required-properties.md | |
F# 7.0 | FS-1131 | NoCompilerInliningAttribute | FS-1131-NoCompilerInliningAttribute.md | |
F# 7.0 | FS-1133 | Arithmetic in Literals | FS-1133-arithmetic-in-literals.md | |
F# 8.0 | FS-1011 | Warn on Recursive Without Tail Call | FS-1011-warn-on-recursive-without-tail-call.md | |
F# 8.0 | FS-1081 | Extended Fixed Bindings | FS-1081-extended-fixed-bindings.md | |
F# 8.0 | FS-1128 | Allow Static Members in Interfaces | FS-1128-allow-static-members-in-interfaces.md | |
F# 8.0 | FS-1129 | Shorthand Anonymous Unary Functions | FS-1129-shorthand-anonymous-unary-functions.md | |
F# 8.0 | FS-1132 | Better Interpolated Triple Quoted Strings | FS-1132-better-interpolated-triple-quoted-strings.md | |
F# 8.0 | FS-1134 | Try With in Sequence Expressions | FS-1134-try-with-in-sequence-expressions.md | |
F# 8.0 | FS-1136 | Constraint Intersection Syntax | FS-1136-constraint-intersection-syntax.md | |
F# 9.0 | FS-1060 | Nullable Reference Types | FS-1060-nullable-reference-types.md | |
F# 9.0 | FS-1079 | Union Properties Visible | FS-1079-union-properties-visible.md | |
F# 9.0 | FS-1140 | Boolean Returning and Return Type Directed Partial Active Patterns | FS-1140-boolean-returning-and-return-type-directed-partial-active-patterns.md | |
F# 9.0 | FS-1144 | Empty Bodied Computation Expressions | FS-1144-empty-bodied-computation-expressions.md | |
F# 9.0 | FS-1147 | Non-String Directive Args | FS-1147-non-string-directive-args.md |
Version | Feature ID | Feature Description | Link | Status |
---|---|---|---|---|
FSharp.Core 4.4.3.0 | FS-1028 | Implement Async.StartImmediateAsTask | FS-1028-Implement Async.StartImmediateAsTask.md | |
FSharp.Core 4.4.3.0 | FS-1036 | Consistent Slicing | FS-1036-consistent-slicing.md | |
FSharp.Core 4.4.3.0 | FS-1041 | IReadOnly | FS-1041-ireadonly.md | |
FSharp.Core 4.4.3.0 | FS-1042 | Add Seq.transpose | FS-1042-add-seq-transpose.md | |
FSharp.Core 4.4.3.0 | FS-1044 | Add NativePtr.toByRef | FS-1044-add-nativeptr-tobyref.md | |
FSharp.Core 4.5.0.0 | FS-1045 | Func to FSharpFunc Overloads | FS-1045-func-to-fsharpfunc-overloads.md | |
FSharp.Core 4.5.0.0 | FS-1050 | TryGetValue Map | FS-1050-trygetvalue-map.md | |
FSharp.Core 4.5.0.0 | FS-1057 | ValueOption | FS-1057-valueoption.md | |
FSharp.Core 4.5.0.0 | FS-1059 | Improve Async Stack Traces | FS-1059-improve-async-stack-traces.md | |
FSharp.Core 4.6.0 | FS-1065 | ValueOption Parity | FS-1065-valueoption-parity.md | |
FSharp.Core 4.6.0 | FS-1066 | tryExactlyOne | FS-1066-tryExactlyOne.md | |
FSharp.Core 4.7.0 | FS-1067 | Async Sequential | FS-1067-Async-Sequential.md | |
FSharp.Core 8.0 | FS-1130 | Array Parallel Collection Functions More Regular | FS-1130-array-parallel-collection-functions-more-regular.md | |
FSharp.Core 9.0 | FS-1135 | Random Functions for Collections | FS-1135-random-functions-for-collections.md | |
FSharp.Core 9.0 | FS-1145 | C# Collection Expression Support for Lists and Sets | FS-1145-csharp-collection-expression-support-for-lists-and-sets.md |
The sources are the markdown files for the chapters (clauses) in the spec
directory.
Run build
to create a new complete spec (including ToC and updated reference links) in your artifacts
directory.
At certain points, releases are created and published in the releases
directory.