Implementing `ExpressibleByStringLiteral`: can use either type `StringLiteralType`,`StaticString` or `String` to implement the require init

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).