What am I failing to understand that allows

`guard samples.contains(where: { $0.isInfinite }) else { return }`

and

`guard (samples.contains{ $0.isInfinite }) else { return }`

but not

`guard samples.contains{ $0.isInfinite } else { return }`

The last gives

Anonymous closure argument not contained in a closure

Cannot convert value of type '((Sample) throws -> Bool) throws -> Bool' to expected condition type 'Bool'

Closure expression is unused

Consecutive statements on a line must be separated by ';'

Expected 'else' after 'guard' condition