Keyword Reference
This topic contains links to information about all F# language keywords.
F# Keyword Table
The following table shows all F# keywords in alphabetical order, together with brief descriptions and links to relevant topics that contain more information.
Keyword | Link | Description |
---|---|---|
abstract |
Members Abstract Classes |
Indicates a method that either has no implementation in the type in which it is declared or that is virtual and has a default implementation. |
and |
let BindingsRecords Members Constraints |
Used in mutually recursive bindings and records, in property declarations, and with multiple constraints on generic parameters. |
as |
Classes Pattern Matching |
Used to give the current class object an object name. Also used to give a name to a whole pattern within a pattern match. |
assert |
Assertions | Used to verify code during debugging. |
base |
Classes Inheritance |
Used as the name of the base class object. |
begin |
Verbose Syntax | In verbose syntax, indicates the start of a code block. |
class |
Classes | In verbose syntax, indicates the start of a class definition. |
default |
Members | Indicates an implementation of an abstract method; used together with an abstract method declaration to create a virtual method. |
delegate |
Delegates | Used to declare a delegate. |
do |
do Bindings Loops: for...to ExpressionLoops: for...in ExpressionLoops: while...do Expression |
Used in looping constructs or to execute imperative code. |
done |
Verbose Syntax | In verbose syntax, indicates the end of a block of code in a looping expression. |
downcast |
Casting and Conversions | Used to convert to a type that is lower in the inheritance chain. |
downto |
Loops: for...to Expression |
In a for expression, used when counting in reverse. |
elif |
Conditional Expressions: if...then...else |
Used in conditional branching. A short form of else if . |
else |
Conditional Expressions: if...then...else |
Used in conditional branching. |
end |
Structs Discriminated Unions Records Type Extensions Verbose Syntax |
In type definitions and type extensions, indicates the end of a section of member definitions. In verbose syntax, used to specify the end of a code block that starts with the begin keyword. |
exception |
Exception Handling Exception Types |
Used to declare an exception type. |
extern |
External Functions | Indicates that a declared program element is defined in another binary or assembly. |
false |
Primitive Types | Used as a Boolean literal. |
finally |
Exceptions: The try...finally Expression |
Used together with try to introduce a block of code that executes regardless of whether an exception occurs. |
fixed |
Fixed | Used to "pin" a pointer on the stack to prevent it from being garbage collected. |
for |
Loops: for...to ExpressionLoops: for...in Expression |
Used in looping constructs. |
fun |
Lambda Expressions: The fun Keyword |
Used in lambda expressions, also known as anonymous functions. |
function |
Match Expressions Lambda Expressions: The fun Keyword |
Used as a shorter alternative to the fun keyword and a match expression in a lambda expression that has pattern matching on a single argument. |
global |
Namespaces | Used to reference the top-level .NET namespace. |
if |
Conditional Expressions: if...then...else |
Used in conditional branching constructs. |
in |
Loops: for...in Expression Verbose Syntax |
Used for sequence expressions and, in verbose syntax, to separate expressions from bindings. |
inherit |
Inheritance | Used to specify a base class or base interface. |
inline |
Functions Inline Functions |
Used to indicate a function that should be integrated directly into the caller's code. |
interface |
Interfaces | Used to declare and implement interfaces. |
internal |
Access Control | Used to specify that a member is visible inside an assembly but not outside it. |
lazy |
Lazy Expressions | Used to specify an expression that is to be performed only when a result is needed. |
let |
let Bindings |
Used to associate, or bind, a name to a value or function. |
let! |
Async expressions Task expressions Computation Expressions |
Used in async expressions to bind a name to the result of an asynchronous computation, or, in other computation expressions, used to bind a name to a result, which is of the computation type. |
match |
Match Expressions | Used to branch by comparing a value to a pattern. |
match! |
Computation Expressions | Used to inline a call to a computation expression and pattern match on its result. |
member |
Members | Used to declare a property or method in an object type. |
module |
Modules | Used to associate a name with a group of related types, values, and functions, to logically separate it from other code. |
mutable |
let Bindings | Used to declare a variable, that is, a value that can be changed. |
namespace |
Namespaces | Used to associate a name with a group of related types and modules, to logically separate it from other code. |
new |
Constructors Constraints |
Used to declare, define, or invoke a constructor that creates or that can create an object. Also used in generic parameter constraints to indicate that a type must have a certain constructor. |
not |
Symbol and Operator Reference Constraints |
Not actually a keyword. However, not struct in combination is used as a generic parameter constraint. |
null |
Null Values Constraints |
Indicates the absence of an object. Also used in generic parameter constraints. |
of |
Discriminated Unions Delegates Exception Types |
Used in discriminated unions to indicate the type of categories of values, and in delegate and exception declarations. |
open |
Import Declarations: The open Keyword |
Used to make the contents of a namespace or module available without qualification. |
or |
Symbol and Operator Reference Constraints |
Used with Boolean conditions as a Boolean or operator. Equivalent to ||.Also used in member constraints. |
override |
Members | Used to implement a version of an abstract or virtual method that differs from the base version. |
private |
Access Control | Restricts access to a member to code in the same type or module. |
public |
Access Control | Allows access to a member from outside the type. |
rec |
Functions | Used to indicate that a function is recursive. |
return |
Computation Expressions Async expressions Task expressions |
Used to indicate a value to provide as the result of a computation expression. |
return! |
Computation Expressions Async expressions Task expressions |
Used to indicate a computation expression that, when evaluated, provides the result of the containing computation expression. |
select |
Query Expressions | Used in query expressions to specify what fields or columns to extract. Note that this is a contextual keyword, which means that it is not actually a reserved word and it only acts like a keyword in appropriate context. |
static |
Members | Used to indicate a method or property that can be called without an instance of a type, or a value member that is shared among all instances of a type. |
struct |
Structs Tuples Constraints |
Used to declare a structure type. Used to specify a struct tuple. Also used in generic parameter constraints. Used for OCaml compatibility in module definitions. |
then |
Conditional Expressions: if...then...else Constructors |
Used in conditional expressions. Also used to perform side effects after object construction. |
to |
Loops: for...to Expression |
Used in for loops to indicate a range. |
true |
Primitive Types | Used as a Boolean literal. |
try |
Exceptions: The try...with Expression Exceptions: The try...finally Expression |
Used to introduce a block of code that might generate an exception. Used together with with or finally . |
type |
F# Types Classes Records Structs Enumerations Discriminated Unions Type Abbreviations Units of Measure |
Used to declare a class, record, structure, discriminated union, enumeration type, unit of measure, or type abbreviation. |
upcast |
Casting and Conversions | Used to convert to a type that is higher in the inheritance chain. |
use |
Resource Management: The use Keyword |
Used instead of let for values that require Dispose to be called to free resources. |
use! |
Computation Expressions Async expressions Task expressions |
Used instead of let! in async expressions and other computation expressions for values that require Dispose to be called to free resources. |
val |
Explicit Fields: The val KeywordSignatures Members |
Used in a signature to indicate a value, or in a type to declare a member, in limited situations. |
void |
Primitive Types | Indicates the .NET void type. Used when interoperating with other .NET languages. |
when |
Constraints | Used for Boolean conditions (when guards) on pattern matches and to introduce a constraint clause for a generic type parameter. |
while |
Loops: while...do Expression |
Introduces a looping construct. |
with |
Match Expressions Object Expressions Copy and Update Record Expressions Type Extensions Exceptions: The try...with Expression |
Used together with the match keyword in pattern matching expressions. Also used in object expressions, record copying expressions, and type extensions to introduce member definitions, and to introduce exception handlers. |
yield |
Lists, Arrays, Sequences | Used in a list, array, or sequence expression to produce a value for a sequence. Typically can be omitted, as it is implicit in most situations. |
yield! |
Computation Expressions Async expressions Task expressions |
Used in a computation expression to append the result of a given computation expression to a collection of results for the containing computation expression. |
const |
Type Providers | Type Providers allow the use of const as a keyword to specify a constant literal as a type parameter argument. |
The following tokens are reserved in F# because they are keywords in the OCaml language:
asr
land
lor
lsl
lsr
lxor
mod
sig
If you use the --mlcompatibility
compiler option, the above keywords are available for use as identifiers.
The following tokens are reserved as keywords for future expansion of F#:
break
checked
component
const
constraint
continue
event
external
include
mixin
parallel
process
protected
pure
sealed
tailcall
trait
virtual
The following tokens were once reserved as keywords but were released in F# 4.1, so now you can use them as identifiers:
Keyword | Reason |
---|---|
method |
Use member to introduce methods. |
constructor |
Use new to introduce constructors. |
atomic |
Related to the fad for transactional memory circa 2006. This would now be a library-defined computation expression. |
eager |
No longer needed; it was initially designed to be let eager to match a potential let lazy . |
object |
No need to reserve this. |
recursive |
Use rec . |
functor |
If F# added parameterized modules, you'd use module M(args) = ... . |
measure |
The [<Measure>] attribute suffices. |
volatile |
The [<Volatile>] attribute suffices. |