Daniel
Daniel

Reputation: 1663

Can I get the type of a statically resolved type parameter?

Say, I have something like this. It does not compile, but you can see what I'm trying to do. I've tried to google every which way, but no dice. Can this be done?

let inline read (s:string) : ^x =
    let parsed = (^x : (static member ofString: string -> ^x option) (s))

    // this is the bit I'm not sure how do to. This doesn't compile.
    // I'm trying to determine what the statically chosen type for ^x is.
    let t = typeof<^x>

    match parsed with
    | Some y -> y
    | None -> failwithf "can't parse %s into %s" s (t.Name)

Upvotes: 5

Views: 99

Answers (1)

Tomas Petricek
Tomas Petricek

Reputation: 243041

This works fine and you can use typeof on statically resolved parameters - the issue is that the parser cannot deal with <^, because it can also be parsed as an operator.

You can fix this easily just by adding spaces around ^x:

let t = typeof< ^x >

Upvotes: 10

Related Questions