package

public val test0: Num<kotlin.Int>
public val test1: [ERROR : Type for N("1")]
public val test2: Cons<kotlin.Int>
public val test3: [ERROR : Type for CC(1, 2)]
public val test4: Cons<Cons<kotlin.Int>>
public val test5: Pair<kotlin.Int, kotlin.collections.List<kotlin.Int>>
public fun testProjections1(/*0*/ x: Pair<in kotlin.Int, out kotlin.String>): [ERROR : Error function type]
public fun testProjections2(/*0*/ x: Pair<in kotlin.Int, out kotlin.Number>): [ERROR : Error function type]
public fun testProjections3(/*0*/ x: Pair<in kotlin.Number, out kotlin.Int>): [ERROR : Error function type]
public fun testProjections4(/*0*/ x: Pair<in kotlin.Int, in kotlin.Int>): [ERROR : Error function type]

public final class Cons</*0*/ T> {
    public constructor Cons</*0*/ T>(/*0*/ head: T, /*1*/ tail: Cons<T>?)
    public final val head: T
    public final val tail: Cons<T>?
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

public final class Foo</*0*/ T> {
    public constructor Foo</*0*/ T>(/*0*/ p: Pair<T, T>)
    public final val p: Pair<T, T>
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

public final class Num</*0*/ Tn : kotlin.Number> {
    public constructor Num</*0*/ Tn : kotlin.Number>(/*0*/ x: Tn)
    public final val x: Tn
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}

public final class Pair</*0*/ X, /*1*/ Y> {
    public constructor Pair</*0*/ X, /*1*/ Y>(/*0*/ x: X, /*1*/ y: Y)
    public final val x: X
    public final val y: Y
    public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
    public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
    public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public typealias C</*0*/ T>  = Cons<T>
public typealias CC</*0*/ T>  = C<C<T>>
public typealias F</*0*/ T>  = Foo<T>
public typealias N</*0*/ T>  = Num<T>
public typealias PL</*0*/ T>  = Pair<T, kotlin.collections.List<T>>
public typealias PN</*0*/ T>  = Pair<T, Num<T>>
