Reputation: 1663
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
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