You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
protocol VectorIndex {}
protocol Vector {
associatedtype Element
associatedtype Index: VectorIndex
subscript(index: Index) -> Element { get set }
init(_ indexToElementMapping: (Index) -> Element)
}
// Some methods for square matrices:
extension Vector where
Self.Element: Vector,
Self.Index == Self.Element.Index,
Self.Element.Element: BinaryFloatingPoint
{
func row(_ index: Index) -> Element { self[index] }
func column(_ index: Index) -> Element { Element { self[$0][index] } }
}
But note that if we make VectorIndex inherit/refine CaseIterable, like so:
protocol VectorIndex: CaseIterable {}
The program will no longer compile, because:
error: cannot convert value of type 'Self.Element.Index' (associated type of protocol 'Vector') to expected argument type 'Self.Index' (associated type of protocol 'Vector')
ie, it seems like the constraint Self.Index == Self.Element.Index is now being ignored.
The text was updated successfully, but these errors were encountered:
Additional Detail from JIRA
md5: ffff7ab8fd7dbc98f69de8dba225a412
Issue Description:
This program compiles as expected:
But note that if we make VectorIndex inherit/refine CaseIterable, like so:
The program will no longer compile, because:
ie, it seems like the constraint Self.Index == Self.Element.Index is now being ignored.
The text was updated successfully, but these errors were encountered: