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

时间:2013-11-06 12:13:44

标签: f# type-providers

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

1 个答案:

答案 0 :(得分: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