Funicular-Switch ist eine schlanke C#-Bibliothek von bluehands, die zentrale Konzepte aus F# – insbesondere die Result- und Option-Typen – in die .NET-Welt überträgt. Damit lässt sich "Railway Oriented Programming" auch in C# umsetzen: Die Geschäftslogik wird konsequent als Folge erfolgreicher und fehlerhafter Schritte modelliert, statt mit Ausnahmen oder verstreuten Null-Checks zu arbeiten.
Im Kern stellt Funicular-Switch generische Typen wie Result<T> und Option<T> bereit, die mit Operatoren wie Map, Bind, Match und Aggregate verkettet werden können. Ergänzt wird die Bibliothek durch Roslyn-basierte Code-Analyzer (z. B. FunicularSwitch.Analyzers) und Source Generators (FunicularSwitch.Generators), die unter anderem Result-, Union- und Extended-Enum-Typen sowie ein TransformMonad-Pattern automatisch erzeugen.
Einsatzzweck ist die saubere, kompositorische Fehlerbehandlung. Statt im Code immer wieder zwischen Erfolg, Validierungsfehler, fachlichem Misslingen und technischer Ausnahme zu unterscheiden, lässt sich der "Happy Path" zentral beschreiben, während Fehlerinformationen erhalten bleiben. Das passt gut zu DDD-, CQRS- und Web-API-Architekturen.
Das Projekt ist auf GitHub unter github.com/bluehands/Funicular-Switch unter MIT-Lizenz verfügbar und wird über mehrere NuGet-Pakete (FunicularSwitch, FunicularSwitch.Analyzers, FunicularSwitch.Generators) verteilt. Der Name spielt auf die Schweizer "Funicular"-Standseilbahn an – passend zum Eisenbahn-Bild des Railway Oriented Programming.
Für bluehands ist Funicular-Switch ein gutes Beispiel dafür, wie funktionale Konzepte produktiv in C#-Projekten genutzt werden können. Insbesondere in Kombination mit den Roslyn-Werkzeugen lassen sich typische Fehler (z. B. unhandled cases beim Pattern Matching) bereits zur Compile-Zeit verhindern.