internal protocol DiagonalMoves { func getDiagonalMoves(from pos: Square.Position) -> [Square.Position] } extension DiagonalMoves { func getDiagonalMoves(from pos: Square.Position) -> [Square.Position] { return [] } } internal protocol LinearMoves { func getLinearMoves(from pos: Square.Position) -> [Square.Position] } extension LinearMoves { func getLinearMoves(from pos: Square.Position) -> [Square.Position] { return [] } }