F#
- Aesthetic Geometry
- 8 out of 10
- Mathematical Elegance
- 9 out of 10
- Linguistic Clarity
- 9 out of 10
- Practitioner Happiness
- 6 out of 10
- Organic Habitability
- 7 out of 10
- Conceptual Integrity
- 8 out of 10
- Total
- 47 out of 60
Character
The brilliant cousin nobody invites to parties. F# does everything right on the .NET platform, writes more elegant code than C# ever could, and wonders why nobody's paying attention.
Dimension Analysis
Φ Aesthetic Geometry
Significant whitespace, pipeline operators, and concise type definitions give F# a clean, proportional visual feel. Pattern matching arms align naturally. Less visual noise than C# by a wide margin.
Ω Mathematical Elegance
MetaLanguage-family heritage gives F# deep mathematical roots. Computation expressions, active patterns, and type providers enable algorithm expression that approaches Hardy's "economy" criterion.
Λ Linguistic Clarity
The pipeline operator, discriminated unions, and lack of ceremony make F# remarkably readable. items |> List.filter isValid |> List.map transform reads as a clear chain of intent. One of the most literate typed languages.
Ψ Practitioner Happiness
A small, devoted community, but limited industry adoption creates friction, fewer libraries, fewer tutorials, fewer jobs. The .NET ecosystem helps, but F# often feels like a second-class citizen behind C#.
Γ Organic Habitability
Type inference and immutability-by-default produce code that ages reasonably well. The .NET interop story is good. Docked because the ecosystem's size means patterns and libraries are less battle-tested than in larger communities.
Σ Conceptual Integrity
"Functional-first on .NET" is a clear, focused vision that Don Syme has maintained consistently. F# knows what it is and doesn't try to be everything. The design is opinionated in the right ways.
How are these scores calculated? Read the methodology
Signature Code
Pipe + discriminated unions
type Shape = | Circle of radius: float | Rect of width: float * height: float
let area = function | Circle r -> System.Math.PI * r * r | Rect (w, h) -> w * h
let totalArea shapes = shapes |> List.map area |> List.sum