El mensaje de error describe el problema - en F #, list<list<'a>>
no es compatible con seq<seq<'a>>
.
La función upcast
ayuda a evitar esto, al hacer a
en un list<seq<float>>
, que luego es compatible con seq<seq<float>>
:
let a = [upcast [4.]]
Test.func(a)
Editar: Puede hacer func
más flexible en los tipos que acepta. El original solo acepta secuencias de seq<'a>
. Aunque list<'a>
implementa seq<'a>
, los tipos no son idénticos, y el compilador le da un error.
Sin embargo, puede modificar func
aceptar secuencias de cualquier tipo, siempre y cuando ese tipo implementa seq<'a>
, escribiendo el tipo interno como #seq
:
type Test() =
static member func (a: seq<#seq<'a>>) = 5.
let a = [[4.]]
Test.func(a) // works
¿Y por qué es así? Si escribe "dejar func (a: seq <'a seq>) = 5". entonces funciona sin ningún upcasting. –
Me sale el mismo error - http://gist.github.com/497844 –
Mi error. Tienes razón. ¿Tienes alguna explicación de por qué para 'let func (a: float seq) = 5.' no tenemos que hacer upcasting y por seq seq tenemos que hacer eso? –