When I try to create some class like
type MyType () =
let func<'T> () = ()
The compiler says that there's an error:
Explicit type parameters may only be used on module or member bindings
But the MSDN says:
A let binding at the module level, in a type, or in a computation expression can have explicit type parameters. A let binding in an expression, such as within a function definition, cannot have type parameters.
Why documentation and compiler say different things?
This appears to be a syntactic restriction on let
bindings inside a class. However, you can still define a generic local function, you just have to specify the type parameters in type annotations:
type MyType () =
let func (x : 'T) : 'T = x
I do not think this is explicitly syntactically forbidden by the specification, because the specification says that a class definition has the following structure:
type type-name patopt as-defnopt =
class-inherits-declopt
class-function-or-value-defnsopt
type-defn-elements
and class-or-value-defn is defined as:
class-function-or-value-defn := attributesopt
static
optlet
rec
opt function-or-value-defns
where function-or-value-defns may be a function definition with explicit type parameters:
function-defn :=
inline
optaccess
opt ident-or-op typar-defnsopt argument-pats return-typeopt = expr
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With