Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 放置一个()->;int转换为F#类型_Types_F# - Fatal编程技术网

Types 放置一个()->;int转换为F#类型

Types 放置一个()->;int转换为F#类型,types,f#,Types,F#,我有一个使用(通用)服务执行IO操作的应用程序。我想将常用的IO函数(Save、SaveAs等)聚合为F#类型,但编译器似乎不喜欢这种表示法: type InputService<'a> = { // Fine SomeFunc : 'a -> Option<'a> // Error (VS2012): "Anonymous type variables are not permitted in this declaration"

我有一个使用(通用)服务执行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
}
输入服务选项()
//错误(见上文)
加载:()->'a
}

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

似乎您需要在这个符号中编写

type InputService<'a> = {
    SomeFunc : 'a -> Option<'a>  
    Save : 'a -> unit
    Load : unit -> 'a
}
生成相同的错误消息,但写入
单元
可以正常工作

产生这些错误消息的原因是
()
是一个常数,类似于
1
。显然你不会写字

let t : 1 = 1;;

同样的道理也适用于
()

谢谢你提供的额外信息,我对F#比较陌生,有OO背景。像这样的小事可真烦人!很高兴看到你对这些信息表示感谢。我认为对于你的例子来说,使用接口可能比使用记录类型更好。嘿,再次感谢。我在C#中为服务层使用了一组接口(“输入”和“输出”组成一个不变的IIOInterface),它们工作得非常好,可以互换。然而,由于存在歧视性的联合,我创建了具有不同类型签名(例如Load:string->('a*FileStream))的独立服务记录,这可能允许消费者更充分地处理略有不同的需求。然而,我可能会从一个泛型接口中对它们进行子类化,以防它变得太重。不过,我觉得处理这些新权力是一项重大责任。
let t : 1 = 1;;