I was trying to use a fsi file to allow mutually recursive classes in separate files, but my fsi file did not compile. Below is a simple example which demonstrates开发者_开发技巧 the problem.
File program.fs:
module mod1
type first =
|zero = 0
File File1.fs:
module mod2
type second =
|zero2 = 0
Compiling with --sig:signature.fsi
produces:
#light
module mod1
type first =
| zero = 0
module mod2
type second =
| zero2 = 0
Which has an error on the line
type second
Which is
Error 1 Unexpected keyword 'type' in signature file. Expected ':', '=' or other token.
You'd think that this is what signature files are for (like C++ header files), but it's not. At least, that's what I thought at first.
The only way to define mutually recursive types in F# is to put them in the same source file and use the and
keyword:
module mod1_mod2
type first =
| zero = 0
and second =
| zero2 = 0
精彩评论