[swift-evolution] Proposal: 'T(literal)' should construct T using the appropriate literal protocol if possible

Ben Rimmington me at benrimmington.com
Fri Jun 3 19:31:53 CDT 2016


John McCall wrote:

> I think that's a very promising way of thinking about literals.  Writing
> a literal creates a notional value whose type is the informal, infinite-
> precise type of all integer/FP/collection/etc. literals, which (1) can be
> implicitly converted to any type that implements the appropriate protocol
> and (2) in fact *must* be converted to some such type (possibly the
> default type for that literal) in order for the code to be executable.

Could you allow IntegerLiteralConvertible.IntegerLiteralType associatedtype
to override the default Swift.IntegerLiteralType typealias iff there's more
than one unlabelled init(_:) to choose from? Then you can call the "correct"
init(_:) instead of calling init(integerLiteral:) as a "special case".

[stdlib/public/core/CompilerProtocols.swift]

    /// Conforming types can be initialized with integer literals.
    public protocol IntegerLiteralConvertible {
        associatedtype IntegerLiteralType : _BuiltinIntegerLiteralConvertible
        /// Create an instance initialized to `value`.
        init(integerLiteral value: IntegerLiteralType)
    }

[stdlib/public/core/Policy.swift]

    /// The default type for an otherwise-unconstrained integer literal.
    public typealias IntegerLiteralType = Int

-- Ben




More information about the swift-evolution mailing list