> On Aug 29, 2017, at 1:49 PM, Slava Pestov <spes...@apple.com> wrote:
> 
> 
>> On Aug 29, 2017, at 11:03 AM, David Sweeris via swift-dev 
>> <swift-dev@swift.org> wrote:
>> 
>> Hi everyone! I'm trying to implement literal values as generic types.
> 
> Can you briefly explain what you mean by this?
> 
> Are you referring to let-polymorphism, like
> 
> let fn = { $0 }
> let f1: (Int) -> Int = fn
> let f2: (Float) -> Float = fn

No, I mean so that a vector's or matrix's dimensions can be part of its type 
(strawman syntax and protocol name, but this is pretty much what I'll be trying 
to support, at least at first):
struct Vector<T: ExpressibleByIntegerLiteral, L: IntegerLiteralExpr> {
  var elements: [T]
  init() {
    elements = [T](repeating: 0, count: L)
  }
}

let vect = Vector<Int, 5>()

And, once that's working, I'm going to add support simple "type functions":
func join <T, L1, L2> (_ lhs: Vector<T, L1>, _ rhs: Vector<T, L2>) -> Vector<T, 
L1 + L2 > {...}
I think restricting the supported "type functions" to expressions that could be 
evaluated by the compiler's "constant folding" code would be a reasonable place 
to start, until we figure out what we want to do about "pure"/"constexpr" 
stuff... even just "+" for numeric and string literals, and "-" for numeric 
literals, seems like a reasonable starting goal, and I think that'd be simple 
enough to implement (famous last words, right?)... It's all academic until I 
get the simple cases working first, though.

Anyway, I think it'll be worth writing up as a proposal, once it's working and 
I've figured out how to present these "literal types" to Swift's type system 
(I'd like to keep it as a literal of some sort, so that, say, `L` in this 
example could be used to set the value of any type that conforms to 
`ExpressibleByIntegerLiteral`).

- Dave Sweeris

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

Reply via email to