Avatar
循環してる感じは確かにするんですが,そうしないと extension が使えないんですよね… 本当は parametrized extension を使ってこう書きたい: protocol Ring {} protocol MatrixImpl { associatedtype BaseRing: Ring } struct SomeRing: Ring {} struct Matrix<B: MatrixImpl> {} struct DefaultMatrixImpl<A: Ring>: MatrixImpl { typealias BaseRing = A } extension<A: Ring> Matrix where B == DefaultMatrixImpl<A> {} (edited)