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.

Original source

Related problems