 let worldSequence = WorldSequence(initial: world)
 let worldView = WorldView(worldSequence: worldSequence)
 XCPlaygroundPage.currentPage.liveView = worldView
+
 // elementsAt
 
 // elements at

			let bottomLeft = MatrixPoint(row: centerPoint.row - ringIndex, column: centerPoint.column - ringIndex)
			
			// Edges
			let topRow: [Element] = elementsAt(column: topLeft.column, range: topLeft.row+1..<bottomRight.row+1)
			let rightColumn: [Element] = elementsAt(row: bottomRight.row, range: bottomRight.column..<topRight.column)
			let bottomRow: [Element] = elementsAt(column: bottomLeft.column, range: bottomLeft.row..<bottomRight.row)
			let leftColumn: [Element] = elementsAt(row: bottomLeft.row, range: bottomLeft.column+1..<topLeft.column+1)
			
			rings.append(topRow)
			rings.append(rightColumn)
			rings.append(bottomRow)
			rings.append(leftColumn)
		}
		return rings
	}
	
	//	public func circle(from centerPoint: MatrixPoint, range: Range<Int>) -> Set<
	
//	func spiral(from centerPoint: MatrixPoint, start cardinality: PrincipalCardinalDirection = .NorthWest, clockwise: Bool = true) -> AnyGenerator<Element> {
//		var isFirstElement = true
//		var nextPoint = centerPoint
//		var ring = 1
//		let directions = cardinality.cases
//		var nextDirection = cardinality
//		//		var traversalDirection = 
//		return AnyGenerator<Element> {
//			/// Distance to travel per edge, sans overlap. 
//			let ringLength = ring * 2
//			let range = 
//				print(nextDirection)
//			nextDirection = nextDirection.generate().next()!
//			if let point = self[point: nextPoint, cardinality: nextDirection, distance: 1] {
//				print(point)
//				return self[point.row, point.column] // this seems backwards
//			}
//			return nil
//		}
//	}
}

	func extendedSelection(around centerPoint: MatrixPoint, range: Range<Int> = 1..<2) -> [[Element]] {
		var rings: [[Element]] = []
		for ringIndex in range {
			
			// Corners
			let topLeft = MatrixPoint(row: centerPoint.row - ringIndex, column: centerPoint.column + ringIndex)
