Los primary associated types permiten parametrizar un protocolo en contextos de tipo existencial:
// Coleccion es un tipo existencial con primary AT
func procesar(_ col: any Collection) {
print(col.reduce(0, +))
}
procesar([1, 2, 3]) // 6
procesar(Set([4, 5])) // 9
El error "can only be used as generic constraint"
Un protocolo con associated types no puede usarse directamente como tipo existencial (var x: MiPAT). La solución es genéricos (<T: MiPAT>), opaque types (some MiPAT), o primary associated types (any MiPAT<Elemento>) si el protocolo los declara.
