// Copyright 2020 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.

// This file contains basic generic code snippets.

package p

// type parameter lists
type B[P any] struct{}
type _[P interface{}] struct{}
type _[P B] struct{}
type _[P B[P]] struct{}

type _[A, B, C any] struct{}
type _[A, B, C B] struct{}
type _[A, B, C B[A, B, C]] struct{}
type _[A1, A2 B1, A3 B2, A4, A5, A6 B3] struct{}

type _[A interface{}] struct{}
type _[A, B interface{ m() }] struct{}

type _[A, B, C any] struct{}

// in functions
func _[P any]()
func _[P interface{}]()
func _[P B]()
func _[P B[P]]()

// in methods
func (T) _[P any]()
func (T) _[P interface{}]()
func (T) _[P B]()
func (T) _[P B[P]]()

// type instantiations
type _ T[int]

// in expressions
var _ = T[int]{}

// in embedded types
type _ struct{ T[int] }

// interfaces
type _ interface{
	m()
	type int
}

type _ interface{
	type int, float, string
	type complex128
	underlying(underlying underlying) underlying
}

type _ interface{
	T
	T[int]
}

// tricky cases
func _(T[P], T[P1, P2])
func _(a [N]T)

type _ struct{
	T[P]
	T[P1, P2]
	f [N]
}
type _ interface{
	m()

	// generic methods - disabled for now
	// m[] /* ERROR empty type parameter list */ ()
	// m[ /* ERROR cannot have type parameters */ P any](P)

	// instantiated types
	// T[] /* ERROR empty type argument list */ 
	T[P]
	T[P1, P2]
}
