【发布时间】:2017-06-18 18:39:54
【问题描述】:
如果我定义这样的类型:
type Foo = Items of seq<int>
我可以如下创建Foo:
Items [1;2;3]
但是,以下方法不起作用:
[1;2;3] |> Items
错误信息是:
Type mismatch. Expecting a
int list -> 'a
but given a
seq<int> -> Foo
编译器是否应该能够将int list 转换为seq<int>?如果Items 构造函数是一个普通函数,我可以用任何一种方式调用它:
let length ints = Seq.length ints
printfn "%A" (length [1;2;3])
printfn "%A" ([1;2;3] |> length)
【问题讨论】:
-
使用构造函数作为一等函数是相当新的功能(好吧,不是那么新,但仍然如此)。见stackoverflow.com/questions/531178/…。这可能是一个错误。
-
好的。有谁知道如何向 Microsoft 的 F# 团队报告错误?
-
@jpierson - 实际上我认为github.com/Microsoft/visualfsharp/issues/new 是解决此类一般语言问题的正确位置。您的链接适用于在一个平台上出现但在另一个平台上不存在的问题。
-
@kvb - 好吧,我假设 VisualFSharp 主要只是 Microsoft 内部的问题,例如使用 Visual Studio 的工具,而不是像编译器错误这样更一般的问题。也许你是对的。