Hidden Features of F#
f#, hidden-features, language-features
Solution
User defined numeric literals can be defined by providing a module whose name starts with `NumericLiteral` and which defines certain methods (`FromZero`, `FromOne`, etc.).
In particular, you can use this to provide a much more readable syntax for calling `LanguagePrimitives.GenericZero` and `LanguagePrimitives.GenericOne`:
module NumericLiteralG = begin
let inline FromZero() = LanguagePrimitives.GenericZero
let inline FromOne() = LanguagePrimitives.GenericOne
end
let inline genericFactorial n =
let rec fact n = if (n = 0G) then 1G else n * (fact (n - 1G))
fact n
let flt = genericFactorial 30.
let bigI = genericFactorial 30I
Problem
This is the unabashed attempt of a similar C# question. So what are your favorite F# hidden (or not) features? Most of the features I've used so far aren't exactly hidden but have been quite refreshing. Like how trivial it is to overload operators compared to say C# or VB.NET. And `Async<T>` has helped me shave off some real ugly code. I'm quite new to the language still so it'd be great to learn what other features are being used in the wild.