private static Covers UncoverDeep( this Covers covers, MineField mineField, Point point) { if (!covers.IsCovered(point)) { return(covers); } if (!mineField.IsEmptyAt(point)) { return(covers.Uncover(point)); } return(point .Neighbours(mineField.Size) .Aggregate( covers.Uncover(point), (current, neighbor) => current.UncoverDeep(mineField, neighbor))); }