So i'm am learning F#, and looked at this:
F# type providers, how do they work
and this:
http://msdn.microsoft.com/en-us/library/hh361033(v=vs.110).aspx
I'm not very fluent in F#, but my (probably incomplete) understanding is that Type Providers are meant to give you some sort of static type-safe access to external data sources.
However, how do they do this? Since the data source is external, there seems (to me) no way of checking the schema of the data source short of querying it, and querying stuff during compile time (and for code completion!) seems like a bad idea.
If they don't do that, though, there has to be some casting going on to cast the unknown data source into some schema (which can then be type-checked) which has the possibility of failure if the data source can't be casted.