F# (pronunciado F Sharp en inglés) es un lenguaje de programación multiparadigma de código abierto,[1] para la plataforma .NET, que conjunta la programación funcional con las disciplinas imperativa y orientada a objetos.
Es una variante del lenguaje de programación ML y es compatible con la implementación Objective Caml.
Los tipos no necesitan ser explícitamente declarados por el programador; serán deducidos en proceso de compilación.
Para una programación funcional, F# provee los tipos tuple, record, discriminated union, list y option.
Un record es un tipo donde los datos son nombrados, por ejemplo: { Name:string; Age:int }.
La palabra clave with es usada para crear una copia de un récord, por ejemplo: { r with Name="CD" }, el cual crea un nuevo récord copiando r y cambiando el valor del campo Name (asumiendo que el récord creado en el ejemplo anterior fue nombrado r).
Pattern matching es también usado cuando se está accediendo a uniones discriminadas.
[4] Este es usado, por ejemplo, cuando existen múltiples formas de matchear con un tipo.
F# soporta una sintaxis general para la definición de composiciones llamado computation expressions.
Por ejemplo: También, F# soporta acceso a todos los tipos y objetos del CLI como los definidos en: System.Collections.Generic.
F# soporta programación asíncrona a través de asynchronous workflows.
permite que el resto del bloque async pueda ser definido como un delegado y pasado como Callback (informática) de una operación asíncrona.
Una definición etiquetada con el atributo [
[9] Por ejemplo: La combinación de type providers, consultas y programación funcional fuertemente tipado es conocido como information rich programming.
Por ejemplo, el siguiente código define un agente y envía 2 mensajes: F# puede ser desarrollado con cualquier editor de texto.
Con el servicio del lenguaje instalado, Visual Studio puede ser usado para crear proyectos de F# y el Visual Studio debugger usado para depurar código F#.
MonoDevelop es un entorno de desarrollo integrado para Linux, Mac y Windows incluyendo soporte para una consola interactiva.