Equivalencia desde Kotlin
Genéricos y varianza
CercanaEn F#, anotaciones out e in en interfaces y delegados expresa la responsabilidad del fixture: Source<T> produce valores y Sink<T> los consume sin mezclar ambas responsabilidades.
Referencia Kotlin: Source<out T> es covariante y Sink<in T> es contravariante.
- Mecanismo
- anotaciones
outeinen interfaces y delegados - Riesgo de diseño
- Copiar la sintaxis de Kotlin en vez de usar anotaciones
outeinen interfaces y delegados.
- Recomendación
- Expón el contrato del fixture y usa anotaciones
outeinen interfaces y delegados solo para la garantía que realmente ofrece.
Diferencias relevantes
- La varianza puede declararse, proyectarse en el uso o no tener una noción de subtipado equivalente.
- La forma idiomática de F# debe conservarse aunque la sintaxis difiera de Kotlin.
Source<T> produce valores y Sink<T> los consume sin mezclar ambas responsabilidades.
type ISource<out 'T> =
abstract Get: unit -> 'T
type ISink<in 'T> =
abstract Put: 'T -> unit