我可以定义通用签名类型并定义实现该签名的函数:
[<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>);;
这是预期的行为吗?
答案 0 :(得分:6)
您还需要在timer<_, _>
文件中声明.fs
类型。
基本上,签名文件便于记录源文件的公共API,但它本身并不声明可以在源文件中使用的任何内容。如果这不是您需要的,您可以删除签名文件并仅使用源文件。