通用函数定义作为F#签名文件中的类型

时间:2014-07-31 10:27:29

标签: f# f#-interactive

我可以定义通用签名类型并定义实现该签名的函数:

[<Measure>] type ms
type timer<'a,'b> = ('a -> 'b) -> 'a -> 'b * int64<ms>;;
let timeit:timer<'a,'b> = fun f x -> ((f x), 1L<ms>);;

我也可以将该类型定义放在F#签名文件(.fsi)中。

module Utils =
    type timer<'a,'b> = ('a -> 'b) -> 'a -> 'b * int64<ms>

但是当我尝试在实现文件中使用该类型定义时,编译器会说&#39;类型&#34;定时器&#34;没有定义&#39;。

[<Measure>] type ms

module Utils =
    let timeit:timer<'a,'b> = fun f x -> ((f x), 1L<ms>);;

这是预期的行为吗?

1 个答案:

答案 0 :(得分:6)

您还需要在timer<_, _>文件中声明.fs类型。

基本上,签名文件便于记录源文件的公共API,但它本身并不声明可以在源文件中使用的任何内容。如果这不是您需要的,您可以删除签名文件并仅使用源文件。