我试图使用fsi文件在单独的文件中允许相互递归的类,但我的fsi文件没有编译。下面是一个演示此问题的简单示例。
文件program.fs:
module mod1
type first =
|zero = 0
File File1.fs:
module mod2
type second =
|zero2 = 0
使用--sig:signature.fsi
进行编译会产生:
#light
module mod1
type first =
| zero = 0
module mod2
type second =
| zero2 = 0
哪一行有错误
type second
哪个是
Error 1 Unexpected keyword 'type' in signature file. Expected ':', '=' or other token.
答案 0 :(得分:1)
您认为这是签名文件的用途(如C ++头文件),但事实并非如此。至少,这就是我一开始的想法。
在F#中定义相互递归类型的唯一方法是将它们放在同一个源文件中并使用and
关键字:
module mod1_mod2
type first =
| zero = 0
and second =
| zero2 = 0