将() - > int放入F#类型

Ada*_*ley 2 f# types

我有一个使用(通用)服务来执行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提示,文件路径等方面进行讨论,但是可以在我的类型中定义该函数签名吗?

Joh*_*mer 8

看来你需要写这个表示法

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)

所以同样适用 ()