1

在下面的代码中,F sharp 说:模块 xyz 需要一个值new : (IBlah<'a> * 'b) -> test<'a, 'b>')

我尝试将确切的构造函数作为显式的 new 提供,但它似乎没有帮助,尽管 Intellisense 虽然类型相同。我希望我不知何故弄错了约束。有人可以告诉我要更改什么以便代码编译(不删除约束)吗?非常感谢。

首先是 fsi 文件:

module xyz

type IBlah<'a> =
    abstract something : 'a -> 'a

type IHuha =
    abstract something : unit -> unit

type test<'a, 'b when 'a :> IHuha and 'b : comparison> =
    new : (IBlah<'a> * 'b) -> test<'a, 'b>
    member huha : unit -> unit

fs 文件是:

module xyz

type IBlah<'a> =
    abstract something : 'a -> 'a

type IHuha =
    abstract something : unit -> unit

type test<'a, 'b when 'a :> IHuha and 'b : comparison> (x:IBlah<'a>, y:'b) =

    member x.huha () = printf "%O" x
4

1 回答 1

3

问题是签名文件正在描述一个构造函数,该构造函数采用元组类型的单个值

(IBlah<'a> * 'b)

实际的构造函数虽然需要 2 个 typeIBlah<'a>'b. 推测 .fs 实现是您想要的。如果是这样,那么只需从 .fsi 文件中删除多余的括号

new : IBlah<'a> * 'b -> test<'a, 'b>
于 2014-03-24T00:41:32.580 回答