// 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()
	~int
}

type _ interface{
	~int | ~float | ~string
	~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]
}
