Есть ли способ ограничить один параметр типа, который должен быть получен из другого?
type Foo<'T, 'U when 'U :> 'T> =
member x.Bar() : 'T = upcast Unchecked.defaultof<'U>
Этот код вызывает следующие ошибки:
Ошибка 1 Недопустимое ограничение: тип, используемый для ограничения, запечатан, что означает, что ограничение может удовлетворяться только одним решением
Ошибка 2 Этот параметр типа использовался таким образом, чтобы он всегда был "T"
Ошибка 3 Статическое принуждение от типа "T to" T0 включает неопределенный тип, основанный на информации до этой точки программы. Статические принуждения не допускаются к некоторым типам. Необходимы дополнительные аннотации типов.
Предупреждение 4 Эта конструкция заставляет код быть менее общим, чем указано аннотациями типа. Переменная типа 'U была ограничена типом' 'T'.