videos una programacion parametros funciones funcion facilito estructuras declarar crear con como codigo f#

f# - una - parametros programacion c++



Cómo restringir un tipo de parámetro por otro (1)

¿Hay una manera de restringir un parámetro de tipo para derivar de otro?

type Foo<''T, ''U when ''U :> ''T> = member x.Bar() : ''T = upcast Unchecked.defaultof<''U>

Este código produce los siguientes errores:

Error 1 Restricción inválida: el tipo usado para la restricción está sellado, lo que significa que la restricción solo puede ser satisfecha por una solución como máximo

Error 2 Este parámetro de tipo se ha usado de una manera que lo restringe para que siempre sea '''' T ''

Error 3 La coerción estática del tipo ''T a'' T0 implica un tipo indeterminado basado en la información anterior a este punto del programa. Las coerciones estáticas no están permitidas en algunos tipos. Se necesitan más anotaciones de tipo.

Advertencia 4 Esta construcción hace que el código sea menos genérico que lo indicado por las anotaciones de tipo. La variable de tipo ''U ha sido restringida para ser tipo'' ''T''.


No :(. Esta es una de las limitaciones más desafortunadas de F # en este momento (en mi opinión). Consulte la sección Resolver restricciones de subtipo de la especificación, que establece que

Nuevas restricciones del tipo de formulario:> ''b se resuelven de nuevo como type ='' b.

Esto es realmente una pena, ya que de lo contrario podríamos solucionar la falta de variación genérica de F #:

let cvt<''a,''b when ''a :> ''b> (s:seq<''a>) : seq<''b> = // doesn''t compile s |> box |> unbox