有没有办法约束一个类型参数从另一个派生?
type Foo<'T, 'U when 'U :> 'T> =
member x.Bar() : 'T = upcast Unchecked.defaultof<'U>
此代码产生以下错误:
错误1无效约束:用于约束的类型是密封的,这意味着约束只能通过最多一个解决方案来满足错误2此类型参数的使用方式将其约束为始终为''T'错误3从“T”到“T0”类型的静态强制涉及基于此程序点之前的信息的不确定类型 . 某些类型不允许静态强制 . 需要进一步的类型注释 . 警告4此构造导致代码不像类型注释所指示的那样通用 . 类型变量'U已被约束为类型''T' .
1 回答
No :( . 这是目前F#中最不幸的限制之一(在我看来) . 请参阅规范的Solving Subtype Constraints部分,其中指出
这真是一个耻辱,否则我们可以解决F#缺乏通用差异: