// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package p

type myInt int

// Parameterized type declarations

type T1[P any] P

type T2[P any] struct {
        f P
        g int // int should still be in scope chain
}

type List[P any] []P

// Alias type declarations cannot have type parameters. Syntax error.
type A1[P any] = /* ERROR cannot be alias */ P

// But an alias may refer to a generic, uninstantiated type.
type A2 = List
var _ A2[int]
var _ A2 /* ERROR without instantiation */

type A3 = List[int]
var _ A3

// Parameterized type instantiations

var x int
type _ x /* ERROR not a type */ [int]

type _ int /* ERROR not a generic type */ []
type _ myInt /* ERROR not a generic type */ []

// TODO(gri) better error messages
type _ T1 /* ERROR got 0 arguments but 1 type parameters */ []
type _ T1[x /* ERROR not a type */ ]
type _ T1 /* ERROR got 2 arguments but 1 type parameters */ [int, float32]

var _ T2[int] = T2[int]{}

var _ List[int] = []int{1, 2, 3}
var _ List[[]int] = [][]int{{1, 2, 3}}
var _ List[List[List[int]]]

// Parameterized types containing parameterized types

type T3[P any] List[P]

var _ T3[int] = T3[int](List[int]{1, 2, 3})

// Self-recursive generic types are not permitted

type self1[P any] self1 /* ERROR illegal cycle */ [P]
type self2[P any] *self2[P] // this is ok
