Ir al contenido
learn

F# para desarrolladores C#/Java — Misión

Escribes C# o Java. Has usado lambdas, LINQ o streams, records, quizá expresiones switch con patrones. F# toma esas ideas, que C# y Java tomaron prestadas de los lenguajes funcionales en los últimos quince años, y las convierte en lo normal: valores que no cambian, funciones que devuelven valores en lugar de modificar estado, tipos que describen cada caso de tus datos y un compilador que comprueba que los has tratado todos.

F# se ejecuta sobre .NET, llama a cualquier biblioteca .NET y compila al mismo lenguaje intermedio que C#. No tienes que salir de tu ecosistema para aprenderlo, y lo que aprendes cambia tu forma de escribir C#.

Este curso usa las versiones actuales: F# 10, que se distribuye con .NET 10, publicado en noviembre de 2025.

Los ejemplos vienen de dos bases de código F# públicas, fijadas en un commit para que los enlaces sigan apuntando al código que describen las lecciones:

  • TARS, un framework de agentes en F# (razonamiento, workflows multiagente, gramáticas probabilísticas), en el commit 87464ce. Su código activo está en v2/: las lecciones solo citan proyectos que su solución v2/Tars.sln compila y que su CI prueba.
  • Guitar Alchemist (GA), una aplicación de teoría musical escrita sobre todo en C#, cuyo DSL musical, parsers, configuración y servidor de lenguaje están en F#, en el commit 32f143c.

Cuando un extracto de GA compila por sí solo, el curso guarda una copia del archivo en code/fsharp/external/ga (GA tiene licencia MIT) y lo ejecuta. TARS no tiene archivo de licencia, así que su código se enlaza y se cita, y solo se reproduce en unas pocas líneas cuando hay que mostrar un comportamiento. Lo que las lecciones encuentran en estos repositorios (un bug, código muerto, un script que no se ejecuta) va al diario.

Cada lección parte de lo que escribirías en C# (y en Java cuando es distinto) y luego muestra:

  1. la forma F#, con un script corto y la salida que realmente imprimió;
  2. el punto de vista del compilador: los errores y advertencias que encontrarás, con su mensaje exacto;
  3. código real de TARS o GA que usa la noción;
  4. ejercicios, con una solución en Solución: inténtalo primero y luego ábrela.
  • ejecutar scripts F# y F# Interactive, y organizar un proyecto F# cuyos archivos compilan en orden;
  • modelar un dominio con records, uniones discriminadas y opciones, para que los estados inválidos no compilen;
  • escribir funciones que se componen, con pipelines, aplicación parcial y coincidencia de patrones exhaustiva;
  • manejar errores con Result, y escribir y leer expresiones de cómputo, incluidas las mías;
  • probar código F# con xUnit, FsCheck y Expecto, y analizar texto con FParsec;
  • medir y reducir asignaciones de memoria, y elegir entre Async, Task y MailboxProcessor;
  • leer y ampliar una base de código F# real, y publicar una biblioteca F# que el código C# consuma cómodamente.
# Lección Nociones Código real
Principiante
1 Scripts, F# Interactive y proyectos dotnet fsi, scripts .fsx, printfn, #r "nuget:", indentación, el orden de los archivos de un .fsproj GA.Business.DSL.fsproj y Scripts/ModesConfig.fsx de GA, Tars.Core.fsproj de TARS
2 Valores, funciones e inferencia de tipos let, inmutabilidad, mutable, inferencia, currificación, aplicación parcial, |> y >>, expresiones en todas partes HarmonicTransformationService de GA, TextNormalizer de TARS
3 Tuplas, records, uniones y opciones tuplas, records y with, uniones discriminadas, Option, uniones de un solo caso, RequireQualifiedAccess ChordAst de GA, Domain.fs y Primitives.fs de TARS
4 Coincidencia de patrones match, guardas, patrones «o», patrones de listas y de records, advertencias de exhaustividad ChordRenderer, ChordParser y BinObj.fsx de GA, AgentWorkflow.fs de TARS
5 Listas, arrays y secuencias módulos List, Array y Seq, pipelines junto a LINQ y streams, evaluación perezosa
6 Módulos, espacios de nombres y organización del proyecto módulos, espacios de nombres, private e internal, archivos de firma
Intermedio
7 Errores con Result programación orientada a raíles, Result junto a las excepciones
8 Expresiones de cómputo — un parser para un DSL seq, async, task, builders, Bind, Return, un parser CE y final explícito el DSL musical de GA
9 Objetos en F# clases, interfaces, expresiones de objeto, llamadas a bibliotecas C#
10 Pruebas xUnit, pruebas basadas en propiedades con FsCheck, Expecto
11 Parsers FParsec y combinadores escritos a mano el DSL musical de GA
12 Modelar un dominio unidades de medida, tipos fantasma, hacer que los estados ilegales no sean representables Budget de TARS
Avanzado y experto
13 Expresiones de cómputo personalizadas builders, let! y and!, lo que genera el compilador AgentWorkflow de TARS
14 Proveedores de tipos — datos tipados desde una muestra proveedores borrados y generativos, inferencia CSV y JSON, estabilidad del esquema FSharp.Data
15 Rendimiento structs, inline, Span, voption, asignaciones medidas con BenchmarkDotNet
16 Concurrencia MailboxProcessor, Async junto a Task, canales
17 Metaprogramación Myriad, FSharp.Compiler.Service el pool de sesiones de F# Interactive de GA
18 Herramientas un servidor de lenguaje en F#, Fantomas, analizadores GaMusicTheoryLsp de GA
19 Arquitectura de una aplicación F# real una lectura guiada de TARS TARS
20 Publicar una biblioteca F# para C# diseño de API, [<CompiledName>], opciones y uniones vistas desde C#
— Diario

Las lecciones 9–13 y 15–20 están planificadas y aún no están escritas.