这是一个简单的类型层次结构。
type Parent() = class end
type Child() = inherit Parent()
我想将('x -> Child)
类型的函数视为('x -> Parent)
:
let f (x: 'x): Child = new Child()
let g: ('x -> Parent) = f // error
但最后一次分配失败,消息为The type 'Parent' does not match the type 'Child'
。有没有办法使这项工作?
答案 0 :(得分:5)
您可以使用upcast operator (:>)使其正常工作:
type Parent () = class end
type Child () = inherit Parent ()
let f x = Child () // val f : x:'a -> Child
let g x = f x :> Parent // val g : x:'a -> Parent