You're not looking at the right StringLiteralType
. There's a default literal typealias:
By conforming to ExpressibleByStringLiteral
with an initializer that takes an argument of type StringLiteralType
, what you're doing is allowing Foo.StringLiteralType
to be inferred as StringLiteralType
(aka String
, unless you shadow the typealias with another value).