我有一个使用(通用)服务来执行IO操作的应用程序.我想将常用的IO函数(Save,SaveAs等)聚合成F#类型,但编译器似乎不喜欢这种表示法:
type InputService<'a> = {
// Fine
SomeFunc : 'a -> Option<'a>
// Error (VS2012): "Anonymous type variables are not permitted in this declaration"
Save : 'a -> ()
// Error (see above)
Load : () -> 'a
}
Run Code Online (Sandbox Code Playgroud)
我知道像这样的有状态函数可能不是惯用的.实际上,我计划在UI提示,文件路径等方面进行讨论,但是可以在我的类型中定义该函数签名吗?
看来你需要写这个表示法
type InputService<'a> = {
SomeFunc : 'a -> Option<'a>
Save : 'a -> unit
Load : unit -> 'a
}
Run Code Online (Sandbox Code Playgroud)
即写单位而不是 ()
你可以在这里看到一个更简单的例子
let t : () = ();;
Run Code Online (Sandbox Code Playgroud)
产生相同的错误信息,但写作unit工作正常.
这些错误消息的原因()是像常量一样1.显然你不能写
let t : 1 = 1;;
Run Code Online (Sandbox Code Playgroud)
所以同样适用 ()