<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><b class="">Proposal</b>: <a href="https://github.com/apple/swift-evolution/blob/master/proposals/0041-conversion-protocol-conventions.md" class="">https://github.com/apple/swift-evolution/blob/master/proposals/0041-conversion-protocol-conventions.md</a></div><div class=""><br class=""></div><div class=""><b class="">Rejection</b>: "The feedback on the proposal was generally positive about the idea of renaming these protocols, but the specific names in the proposal are not well received, and there is no apparent confluence in the community on better names. The core team prefers discussion to continue -- if/when there is a strong proposal for a better naming approach, we can reconsider renaming these."</div><div class=""><br class=""></div><div class="">John McCall: "To be clear, I don't care about the name. If you want to rename IntegerLiteralConvertible to IntegerLiteral or whatever, I won't drag the conversation into the muck again. :) It's the design of the requirements that I'm pretty opposed to revisiting."</div><div class=""><br class=""></div><div class=""><div class=""><span style="font-family: Palatino-Roman;" class=""><b class="">The Problem: </b></span><span style="font-family: Palatino-Roman;" class="">This is really the last chance to rationalize this across the language and to evaluate whether other protocol groups should have a core scheme for naming.</span></div></div><div class=""><br class=""></div><div class=""><b class="">Categories:</b></div><div class=""><div class="" style="font-family: Palatino-Roman;"><ul class=""><li class="">Type I: A protocol for types that can be initialized from specific types or protocols, e.g. created/initialized with strings (a specific type) or created/initialized with floating point numbers (conforming to a protocol). Current examples include "IntegerLiteralConvertible".</li><li class="">Type II: A protocol for types that can form a representation which may or may not provide a complete projection (the original may not be recoverable from that representation), e.g. "CustomStringConvertible" and "CustomPlaygroundQuickLookable" both fall into this. </li><li class="">Type III: A protocol for isomorphism: can be converted to and from a type, e.g. "RawRepresentable"</li></ul></div></div><div class=""><br class=""></div><div class=""><b class="">Existing Protocols:</b></div><div class=""><b class=""><br class=""></b></div><div class=""><span style="font-family: Palatino-Roman;" class="">AbsoluteValuable, AnyCollectionProtocol, AnyObject, ArrayLiteralConvertible, BidirectionalCollection, Collection, BidirectionalIndexable, BinaryFloatingPoint, FloatLiteralConvertible, BitwiseOperations, Boolean, BooleanLiteralConvertible, CVarArg, Collection, Sequence, Comparable, CustomDebugStringConvertible, CustomLeafReflectable, CustomPlaygroundQuickLookable, CustomReflectable, CustomStringConvertible, DictionaryLiteralConvertible, Equatable, ErrorProtocol, ExtendedGraphemeClusterLiteralConvertible, FloatLiteralConvertible, FloatingPoint, IntegerLiteralConvertible, SignedNumber, AbsoluteValuable, Strideable, Hashable, Indexable, IndexableBase, Integer : _Integer, Strideable, IntegerArithmetic : _IntegerArithmetic, Comparable, IntegerLiteralConvertible, IteratorProtocol, LazyCollectionProtocol, LazySequenceProtocol, LazySequenceProtocol, MirrorPath, MutableCollection, Collection, MutableIndexable, NilLiteralConvertible, OptionSet, RawRepresentable, OutputStream, RandomAccessCollection, BidirectionalCollection, RandomAccessIndexable, RangeReplaceableCollection, Collection, RangeReplaceableIndexable, RawRepresentable, Sequence, SetAlgebra, ArrayLiteralConvertible, SignedInteger : _SignedInteger, Integer, SignedNumber, IntegerLiteralConvertible, Streamable, Strideable, StringInterpolationConvertible, StringLiteralConvertible, UnicodeCodec, UnicodeScalarLiteralConvertible, UnsignedInteger : _DisallowMixedSignArithmetic, Integer, _DisallowMixedSignArithmetic : _Integer, _Incrementable, _Integer, CustomStringConvertible, Hashable, IntegerArithmetic, BitwiseOperations, _Incrementable, _IntegerArithmetic, _SequenceWrapper, _SignedInteger : _Integer, SignedNumber</span></div><div class=""><span style="font-family: Palatino-Roman;" class=""><br class=""></span></div><div class=""><br class=""></div><div class=""><b class="">Names (see: <a href="https://pbs.twimg.com/media/Ck8TUt0UkAAX1Im.jpg" class="">https://pbs.twimg.com/media/Ck8TUt0UkAAX1Im.jpg</a>)</b></div><div class=""><b class=""><br class=""></b></div><div class="">Type I: Initializing</div><div class="">Type II: Representable</div><div class="">Type III: Isomorphic</div><div class=""><br class=""></div><div class="">Here's a paint brush. Have at it. And keep in mind the API-isms like "use nouns" (e.g. Sequence vs SequenceType) and "ing" (e.g. Initializing vs Initializable)</div><div class=""><br class=""></div><div class="">-- E</div><div class=""><br class=""></div></body></html>