Hi,

Recently I needed to implement `contains` methods to check if a range

contains another range. I think those are basic operations and suitable for

the standard library.

Although it may seem easy to implement such `contains` methods whenever we

need them, their precise specifications are too complicated to do so.

e.g.

let a: ClosedRange<Int> = 2...7

a.contains(3...5) // `true`

a.contains(3...7) // also `true`

a.contains(3..<8) // still `true` because all values contained in `3..<8`

are also in `a`

a.contains(3..<9) // `false`

let b: ClosedRange<Float> = 2...7

b.contains(3...5) // `true`

b.contains(3...7) // `true`

b.contains(3..<8) // `false` because { x | 7.0 < x < 8.0 } is not contained

in `a`

let c: Range<Float> = 2..<7

c.contains(3...5) // `true`

c.contains(3..<7) // `true`

c.contains(3...7) // `false` because 7.0 is not contained in `a`

My experimental implementation is here:

https://github.com/koher/range-contains

(Currently does not support one-sided ranges)

What are your thoughts about them?

## ···

--

Yuta