# [swift-users] Experimenting with conditional conformances

Antonino Ficarra antonino.ficarra at gmail.com
Tue Nov 28 14:31:12 CST 2017

```I’have a protocol:

protocol Inertial {
func	convexHull( _ t:AffineTransform? ) -> [CGPoint]
func	area( _ t:AffineTransform? ) -> CGFloat
func	firstOrderMomentums( _ t:AffineTransform? ) -> (x:CGFloat,y:CGFloat)
func	secondOrderMomentums( _ t:AffineTransform? ) -> (xx:CGFloat,xy:CGFloat,yy:CGFloat)
}

I make [CPoint] (a poligon) conforms to the protocol:

extension Array : Inertial where Element == CGPoint {
func convexHull(_ t: AffineTransform?) -> [CGPoint] {
return ConvexHull.convexHull( points:self ).map { \$0 * t }
}

func area(_ t: AffineTransform?) -> CGFloat {
return InertialUti.area( polig: self,t )
}

func firstOrderMomentums(_ t: AffineTransform?) -> (x: CGFloat, y: CGFloat) {
return InertialUti.firstOrderMomentums( polig:self,t )
}

func secondOrderMomentums(_ t: AffineTransform?) -> (xx: CGFloat, xy: CGFloat, yy: CGFloat) {
return InertialUti.secondOrderMomentums( polig:self,t )
}
}

and work like a charm.

Then I try to make [[CPoint]] (an array of poligons) conforms to the same protocol:

extension Array : Inertial where Element == [CGPoint] {
var allVertexs : [CGPoint] {
return flatMap({\$0})
}

func convexHull(_ t: AffineTransform?) -> [CGPoint] {
return ConvexHull.convexHull( points:allVertexs ).map { \$0 * t }
}

func area(_ t: AffineTransform?) -> CGFloat {
return InertialUti.area( poligs: self,t )
}

func firstOrderMomentums(_ t: AffineTransform?) -> (x: CGFloat, y: CGFloat) {
return InertialUti.firstOrderMomentums( poligs:self,t )
}

func secondOrderMomentums(_ t: AffineTransform?) -> (xx: CGFloat, xy: CGFloat, yy: CGFloat) {
return InertialUti.secondOrderMomentums( poligs:self,t )
}
}

but this isn’t permitted: Redundant conformance of 'Array<Element>' to protocol ‘Inertial’ !

I think it's a severe limitation: array with different element’s type (i.e. different specializations of the same generic type) should be treated as distinct types and not as the same type.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-users/attachments/20171128/483818f6/attachment.html>
```