> If anyone is curious, the revised proposal can be found here: 
> https://github.com/austinzheng/swift-evolution/blob/2b31df6163f5c5d1975a37e72c6996b82d61a5c6/proposals/0089-rename-string-reflection-init.md

This is great. My only suggestion is that `init?(description: String)` should 
be `init?(_ description: String)`, since by definition the conversion is 
fullwidth. But you may already be planning to incorporate that change, since 
Chris mentioned it.

Just quickly scanning the docs on swiftdoc.org, here are protocols which I 
think should conform to LosslessStringConvertible:

* FloatingPoint
* Integer
* Boolean?

And here are concrete types:

* Bool (if not Boolean)
* Character
* String (kind of circular, but I think it's a good idea) and its views
* String.Index? (Not sure how to represent this; UTF-8 offset, maybe?)
* UnicodeScalar

Protocols which would require conditional conformances:

* RangeReplaceableCollection where Iterator.Element == Character or 
UnicodeScalar
* SetAlgebra where Iterator.Element == Character or UnicodeScalar

These protocols were chosen because they include `init<S: Sequence where 
S.Iterator.Element == Iterator.Element>(_: S)` initializers.

Generic types which would require conditional conformances:

* ClosedRange where Bound: LosslessStringConvertible
* CountableClosedRange where Bound: LosslessStringConvertible
* CountableRange where Bound: LosslessStringConvertible
* Range where Bound: LosslessStringConvertible

These would be non-trivial, but useful. They could have a serialization like:

        var description: String {
                let operator = "..<"    // or "..." for the closed ranges
                func escape(_ string: String) -> String {
                        let escapedOperator = 
String(operator.characters.flatMap { ["\\", $0] })
                        return string.replacingOccurrences(of: "\\", with: 
"\\\\").replacingOccurrences(of: operator, with: escapedOperator)
                }
                
                return escape(String(lowerBound)) + " " + operator + " " + 
escape(String(upperBound))
        }

The `init(_: String)` method would need to handle the escapes—hence the 
nontrivial-ness.

Technically possible, but probably unwise:

* ObjectIdentifier
* UnsafePointer and friends
* Set.Index and Dictionary.Index

-- 
Brent Royal-Gordon
Architechies

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to