2

我有一个使用(通用)服务来执行 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
}

我知道像这样的有状态函数可能不是惯用的。实际上,我计划在 UI 提示、文件路径等中进行柯里化,但是否可以在我的类型中定义该函数签名?

4

1 回答 1

8

看来,在这种表示法中,您需要编写

type InputService<'a> = {
    SomeFunc : 'a -> Option<'a>  
    Save : 'a -> unit
    Load : unit -> 'a
}

即写单位而不是()

你可以在这里看到一个更简单的例子

let t : () = ();;

产生相同的错误消息,但写作unit工作正常。

这些错误消息的原因是它()是一个常量,例如1. 显然你不能写

let t : 1 = 1;;

所以同样适用于()

于 2013-09-15T10:41:05.860 回答