blob: 78a49f58c83f1f297121f2a4be2da8d899c32fd0 [file] [log] [blame]
public class C1<T> : ClassBoundP {
public typealias Function = (C1<T>) -> (S1<T>) -> (E1<T>) -> Int
public typealias Tuple = (C1<T>, S1<T>, E1<T>, Int)
public typealias Inner = T
public let aClass: C1<T>
public let aStruct: S1<T>
public let anEnum: E1<T>
public let function: Function
public let tuple: Tuple
public let dependentMember: T
public init(aClass: C1<T>, aStruct: S1<T>, anEnum: E1<T>, function: @escaping Function, tuple: Tuple, dependentMember: T) {
self.aClass = aClass
self.aStruct = aStruct
self.anEnum = anEnum
self.function = function
self.tuple = tuple
self.dependentMember = dependentMember
}
}
public class C2<T: P1> {
public typealias Function = (C1<T>) -> (S1<T>) -> (E1<T>) -> Int
public typealias Tuple = (C2<T>, S2<T>, E2<T>, Int)
public let aClass: C1<T>
public let aStruct: S1<T>
public let anEnum: E1<T>
public let function: Function
public let tuple: Tuple
public let primaryArchetype: T
public let dependentMember1: T.Inner
public init(aClass: C1<T>, aStruct: S1<T>, anEnum: E1<T>, function: @escaping Function, tuple: Tuple, primaryArchetype: T, dependentMember1: T.Inner) {
self.aClass = aClass
self.aStruct = aStruct
self.anEnum = anEnum
self.function = function
self.tuple = tuple
self.primaryArchetype = primaryArchetype
self.dependentMember1 = dependentMember1
}
}
public class C3<T: P2> {
public typealias Function = (C3<T>) -> (S3<T>) -> (E3<T>) -> Int
public typealias Tuple = (C3<T>, S3<T>, E3<T>, Int)
public let aClass: C3<T>
public let aStruct: S3<T>
public let anEnum: E3<T>
public let function: (C3<T>) -> (S3<T>) -> (E3<T>) -> Int
public let tuple: (C3<T>, S3<T>, E3<T>, Int)
public let primaryArchetype: T
public let dependentMember1: T.Outer
public let dependentMember2: T.Outer.Inner
public init(aClass: C3<T>, aStruct: S3<T>, anEnum: E3<T>, function: @escaping Function, tuple: Tuple, primaryArchetype: T, dependentMember1: T.Outer, dependentMember2: T.Outer.Inner) {
self.aClass = aClass
self.aStruct = aStruct
self.anEnum = anEnum
self.function = function
self.tuple = tuple
self.primaryArchetype = primaryArchetype
self.dependentMember1 = dependentMember1
self.dependentMember2 = dependentMember2
}
}
public struct C4<T : P1, U : P1> {}
extension C4 : P1, P2 {
public typealias Inner = T
public typealias Outer = T
}
public struct S1<T> {
public let aClass: C1<T>
public let aStruct: Box<S1<T>>
public let anEnum: Box<E1<T>>
public let function: (C1<T>) -> (S1<T>) -> (E1<T>) -> Int
public let tuple: (C1<T>, Box<S1<T>>, Box<E1<T>>, Int)
public let primaryArchetype: T
}
public struct S2<T: P1> {
public let aClass: C2<T>
public let aStruct: Box<S2<T>>
public let anEnum: Box<E2<T>>
public let function: (C2<T>) -> (S2<T>) -> (E2<T>) -> Int
public let tuple: (C2<T>, Box<S2<T>>, Box<E2<T>>, Int)
public let primaryArchetype: T
public let dependentMember1: T.Inner
}
public struct S3<T: P2> {
public typealias Function = (C3<T>) -> (S3<T>) -> (E3<T>) -> Int
public typealias Tuple = (C3<T>, Box<S3<T>>, Box<E3<T>>, Int)
public let aClass: C3<T>
public let aStruct: Box<S3<T>>
public let anEnum: Box<E3<T>>
public let function: Function
public let tuple: Tuple
public let primaryArchetype: T
public let dependentMember1: T.Outer
public let dependentMember2: T.Outer.Inner
public init(aClass: C3<T>, aStruct: Box<S3<T>>, anEnum: Box<E3<T>>, function: @escaping Function, tuple: Tuple, primaryArchetype: T, dependentMember1: T.Outer, dependentMember2: T.Outer.Inner) {
self.aClass = aClass
self.aStruct = aStruct
self.anEnum = anEnum
self.function = function
self.tuple = tuple
self.primaryArchetype = primaryArchetype
self.dependentMember1 = dependentMember1
self.dependentMember2 = dependentMember2
}
}
public struct S4<T : P1, U : P1> {}
extension S4 : P1, P2 {
public typealias Inner = T
public typealias Outer = T
}
public enum E1<T> {
case Class(C1<T>)
case Struct(S1<T>)
indirect case Enum(E1<T>)
case Int(Swift.Int)
case Function((T) -> E1<T>)
case Tuple(C1<T>, S1<T>, Swift.Int)
case Primary(T)
case Metatype(T.Type)
}
public enum E2<T: P1> {
case Class(C2<T>)
case Struct(S2<T>)
indirect case Enum(E2<T>)
case Function((T.Type) -> E1<T>)
case Tuple(C2<T>, S2<T>, Int)
case Primary(T)
case DependentMemberInner(T.Inner)
case ExistentialMetatype(T.Type)
}
public enum E3<T: P2> {
case Class(C3<T>)
case Struct(S3<T>)
indirect case Enum(E3<T>)
case Function((T.Type.Type) -> E1<T>)
case Tuple(C3<T>, S3<T>, Int)
case Primary(T)
case DependentMemberOuter(T.Outer)
case DependentMemberInner(T.Outer.Inner)
}
public enum E4<T : P1, U : P1> {
public typealias First = T
}
extension E4 : P1, P2, P3 {
public typealias Inner = T
public typealias Outer = U
public typealias Second = U
}