Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

f#

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)
like image 920
Daniel Avatar asked Jul 14 '17 20:07

Daniel


1 Answers

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 >
like image 170
Tomas Petricek Avatar answered Nov 02 '22 21:11

Tomas Petricek