递归名称空间无法与类型提供程序静态参数一起正常使用

时间:2018-06-21 22:08:15

标签: f# type-providers

来自#5227

使用以下工具

  

Microsoft Visual Studio Community 2017预览版本15.8.0预览版2.0 VisualStudio.15.Preview / 15.8.0-pre.2.0 + 27729.1 Windows 10上的Microsoft .NET Framework版本4.7.02558

复制步骤

  • 创建一个图书馆项目
  • 将目标.NET Framework版本更改为4.5.2
  • 将目标F#版本更改为4.1(Core 4.4.3.0)
  • 从NuGet安装SQLProvider程序包
  • 使用以下代码替换Library1.fs内容 ;
namespace Ns1
#nowarn "40"

open FSharp.Data.Sql

[<AutoOpen>]
module Definitions =
    let [<Literal>] connString = @"Valid connection string"
    let t1 = T1() //T1 not defined

type T1() = 
    static member f1() = connString

type amplaSQL = SqlDataProvider<ConnectionString = connString>

按预期,'let t1 = T1()'给出错误,该错误是文件后面定义的T1类型。 这就是rec名称空间应该允许的

  • 将第一行更改为“ namespace rec Ns1”

预期行为

没有错误

实际行为

正如预期的那样,以前的错误消失了,因为即使在受影响的行中也知道T1。但是,最后一个代码行出现了一个新的意外错误,抱怨没有定义connString

namespace rec Ns1
#nowarn "40"

open FSharp.Data.Sql

[<AutoOpen>]
module Definitions =
    let [<Literal>] connString = @"Valid connection string"
    let t1 = T1()

type T1() = 
    static member f1() = connString

type amplaSQL = SqlDataProvider<ConnectionString = connString> //connString not defined

问题:这是预期的行为(我未正确使用rec名称空间吗?)还是F#编译器问题?

0 个答案:

没有答案