How not to name types and identifiers

From the 'code which is valid but looks strange and might be removed in the next release of F#, but isn't a big deal anyways' department: Adding managed, generic .Net names as part of the inference proceedure process.

#light

open System.Collections.Generic

let x = new ``List`1``<int>([1..10])

 

Note that you need to use the double back ticks "``" in order to declare the type name, otherwise you get a syntax error. Back ticks allow you to specify a literal type name, in case it conflicts with an F# keyword. For example, you can create a C# type named 'unit'. This also allows you to write the strange, yet valid code:

 

let ``_`` = 3

let f x = 3 * 3

assert ((f ``_``) = 9)

 

Yes, using back ticks you can name an identifier '_'. Not especially useful, but interesting none the less.