8

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

4

1 回答 1

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
于 2013-11-06T21:13:04.150 回答