 }
 
 extension RangeProtocol {
-
+  /// Creates a copy of `other`.
   @inline(__always)
   public init(_ other: Self) {
     self = other
   }
   
+  /// Returns `true` iff `self` and `other` contain a value in common.
   @inline(__always)
   public func overlaps<
     Other: RangeProtocol where Other.Bound == Bound

  }
}

public protocol HalfOpenRangeProtocol : RangeProtocol {}

extension HalfOpenRangeProtocol {
  @inline(__always)
  public init<
    Other: HalfOpenRangeProtocol where Other.Bound == Bound

        || (!self.isEmpty && other.contains(lowerBound))
  }
  
  /// Returns `true` iff `self.contains(x)` is `false` for all values of `x`.
  public var isEmpty: Bool {
    // Note: this default implementation is not suitable for a range
    // that has an open lower bound.
    return !self.contains(self.lowerBound)
  }
  
  /// Returns `self` clamped to `limits`.
  ///
  /// The bounds of the result, even if it is empty, are always
  /// limited to the bounds of `limits`.
  @inline(__always)
  public func clamped(to limits: Self) -> Self {
    return Self(
