     ///
     /// Prefer calling `executeMove(_:)` with a try/catch when checking for
     /// errors before executing a move instead of `isValidMove(_:for:)`.
+    @warn_unused_result
     public func isValidMove(move: Move, for color: Color? = nil) -> Bool {
         if case .Value = _resultOf(move, for: color) {
             return true

    }

    /// Returns a location for an obstructing piece within the sequence.
    private func _locationForObstruction<S: SequenceType where S.Generator.Element == Location>(s: S) -> Location? {
        for location in s {
            guard board[location] == nil else {

    }

    /// The available moves for the current player.
    @warn_unused_result
    public func availableMoves() -> [Move] {
        return Array(board.map({ movesForPiece(at: $0.location) }).flatten())
    }

    /// Returns the moves currently available for the piece at `location`, if any.
    @warn_unused_result
    public func movesForPiece(at location: Location) -> [Move] {
        guard let piece = board[location] else { return [] }
        let pieceColor = piece.color
