Types 放置一个()->;int转换为F#类型
我有一个使用(通用)服务执行IO操作的应用程序。我想将常用的IO函数(Save、SaveAs等)聚合为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"
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;;