> On Apr 17, 2016, at 7:13 AM, Joanna Carter via swift-evolution 
> <[email protected]> wrote:
> 
> I often find myself needing to construct an instance of a bound generic type 
> at runtime, in much the same manner as I would a "standard" type.
> 
> e.g.
> 
> As for a standard type…
> 
> let aType = Int.Type
> 
> let anInt = aType.init(0)
> 
> I also want to be able to use the same mechanism for a generic type…
> 
> struct MyStruct<T: Equatable /*, etc */>
> {
>  var value: T?
> }
> 
> let paramType = // type from streaming or reflection compliant with Equatable
> 
> let structType = MyStruct<paramType>.self
> 
> let f = structType.init()
> 
> 
> At present, the following compiler error is raised…
> 
> 'paramType' is not a type
> 
> I am  the only one to require this behaviour? If not, do we want a proposal? 
> If so, could you let me know your views on its worthiness?


In programming-language circles, this feature is called “dependent types” (see, 
e.g., https://en.wikipedia.org/wiki/Dependent_type), and it introduces 
significant complicates into a type system. For example, determining whether 
two types are equivalent becomes a run-time property rather than a compile-time 
property. I don’t know if Swift will end with a dependently-typed type system. 
To get there, we would need a number of very strongly-motivating use cases 
illustrating how common programming tasks can be improved with dependent types, 
 and we would need to solid plan for managing the complexity—both 
implementation complexity in the compiler’s type checker and also the language 
complexity seen by Swift user’s when they encounter this feature. 

        - Doug

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to