> On Jun 29, 2016, at 3:51 PM, Erica Sadun <er...@ericasadun.com> wrote:
> 
> On Jun 29, 2016, at 2:33 PM, Daniel Dunbar via swift-users 
> <swift-users@swift.org> wrote:
>> 
>> I would like some clarification regarding the expected role of 
>> `CustomStringConvertible` for types which have a natural, lossless, string 
>> representation.
> 
> And this is why we started down the road towards clarifying that it wasn't 
> convertible but a lossy representation. What you really want is a protocol 
> that
> represents an isomorphic relationship. RawRepresentable is about as close as 
> you can get right now.
> 
> And "representation" in RawRepresentable actually means "isomorphic conversion
> between types". (ish.)
> 
> -- E, paging Matthew Johnson to the SE-0041 courtesy phone


RawRepresentable does not require isomorphism and in fact conforming types 
*cannot* express isomorphm through conformances to this protocol due to the 
failable initializer.  RawRepresentable expresses an injective conversion 
making the inverse a partial function which is why the initializer is failable 
(https://en.wikipedia.org/wiki/Injective_function).  RawRepresentable 
conformance with a String `RawValue` is exactly the right way to express a 
lossless String representation in Swift.  

Isomorphic relationships require a precise one-to-one correspondence between 
values of two types (sets in mathematics).  They are usually bijective (I 
didn’t know they aren’t always bijective until I consulted wikipedia!).  
https://en.wikipedia.org/wiki/Isomorphism 
https://en.wikipedia.org/wiki/Bijection

A good example of an isomorphism in Swift is CGFloat and Double on platforms 
where CGFloat is a Double.  For any value of one you can convert to the other 
and convert back to the original type without losing any information in either 
direction.

> 
> p.s. 
> https://github.com/apple/swift-evolution/blob/master/proposals/0041-conversion-protocol-conventions.md
> 
> 
>> I don't have good terminology to use here, but is the expectation that the 
>> "textual string representation" is a readable description of the object? 
>> This seems to correspond to the synthesized (?) default definition for 
>> struct types, as well as some of the uses for Foundation types without 
>> natural string representations (i.e. `Foundation.Notification` reports 
>> something like "name = foo, object = ..., userInfo = ...").
>> 
>> Or, is the expectation that it provide a string *representation* of the 
>> object, for objects where that makes sense. This corresponds to the use in 
>> `Foundation.UUID`, or the example of `Point.description` from the stdlib's 
>> `CustomStringConvertible` documentation.
>> 
>> Another way of phrasing this question is: for types which have a reversible 
>> string representation, should I expect `CustomStringConvertible.description` 
>> to give me a string I could use to reconstruct an instance _without_ knowing 
>> its type?
>> 
>> And another way (my actual question) is, given a `struct Path` object which 
>> contains a path string, what should `print(Path("a"))` print?
>> 
>> - Daniel
>> 
>> _______________________________________________
>> swift-users mailing list
>> swift-users@swift.org
>> https://lists.swift.org/mailman/listinfo/swift-users
> 

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to