Estoy intentando volver a escribir código genérico como esta (C#):Vuelva a escribir algo de código C# genéricos en F #
U Upcast<T, U>(T x) where T : U { return x; }
En F #:
let ucast<'T, 'U when 'T :> 'U> (x: 'T) = x :> 'U
Pero F # restricción resolución funciona diferente a C# y compilador genera un montón de errores de escritura: FS0698
de error: restricción no válida: la tipo utilizado para la restricción se sellado, lo que significa la restricción sólo podían ser satisfechas por a lo sumo un solución
FS0064 advertencia: Esta construcción hace que código a ser menos genérico que indica por las anotaciones de tipo . El tipo variable 'T se ha limitado a tipo' 'U'.
FS0663 error: Este parámetro tipo ha ha utilizado de una manera que restringe que estar siempre 'FS0013
error' U ': La coacción estática de tipo' U a 'U
implica un tipo indeterminado basado en en la información anterior a este programa punto. Las coerciones estáticas no son permitidas en algunos tipos. Se necesitan anotaciones adicionales de tipo . FS0661error: Uno o más del tipo clase o función explícita variables para esta unión no podría generalizarse, porque eran constreñidos a otros tipos
Por favor, me explique cómo reescribir correctamente el código C# de arriba y por qué la versión F # que he escrito no se compila.