Int, m: Int, R: Ring>: AdditiveGroup { static func + (a: Matrix<n, m, R>, b: Matrix<n, m, R>) -> Matrix<n, m, R> { return Matrix { (i, j) in … } } static func * <p>(a: Matrix<n, m, R>, b: Matrix<m, p, R>) -> _Matrix<n, p, R> { return Matrix { (i, k) in … } }