是否可以打开Type Provider提供的命名空间?

ben*_*ruk 8 f# type-providers

有没有办法open通过类型提供程序实现提供的类型命名空间?我问,因为一些生成的类型名称路径在代码中非常长且很难看.我使用了类型缩写来缓解这种情况,但显然这是一个手动过程. F#open关键字不支持此功能.还有另外一种方法吗? 更新:正如答案和评论中指出的那样,这是错误的.您可以打开提供的类型命名空间.我没有意识到我正在查看深层嵌套类型,而不是命名空间.

Tom*_*cek 6

这很棘手 - 参数化类型提供程序(如标准SQL提供程序或XML和JSON的F#数据提供程序)需要将它们生成的所有类型(表示表,XML节点等)放在主生成类型中.因此,您可能想要使用的所有类型都隐藏在某个主类型的嵌套类型中(指定了参数).

这是有道理的 - 如果您使用具有多个参数的类型提供程序,则为每个配置生成的类型必须是独立的.

正如@kvb指出的那样,你不能open使用嵌套类型,但你可以使用类型别名来减轻这种痛苦.例如,使用F#Data,我可以定义一个别名R,让我只用两个额外的字符访问所有生成的域类型:

#r @"..\packages\FSharp.Data.1.1.10\lib\net40\FSharp.Data.dll"
open FSharp.Data

type RssFeed = XmlProvider<"http://rss.nytimes.com/services/xml/rss/nyt/HomePage.xml">
type R = RssFeed.DomainTypes

let printTitle (itm:R.Item) = printfn "%A" itm.Title
Run Code Online (Sandbox Code Playgroud)