blob: 996ad2c3ba225ed355e133a8cd534170df52b41f [file] [log] [blame]
package main
import (
"fmt"
"go/ast"
"go/parser"
"go/token"
"go/types"
"log"
)
const src = `
//!+input
package p
func Square[N ~int|~float64](n N) N {
return n*n
}
//!-input
`
// !+show
func ShowImplicit(pkg *types.Package) {
Square := pkg.Scope().Lookup("Square").Type().(*types.Signature)
N := Square.TypeParams().At(0)
constraint := N.Constraint().(*types.Interface)
fmt.Println(constraint)
fmt.Println("IsImplicit:", constraint.IsImplicit())
}
//!-show
/*
//!+output
~int|~float64
IsImplicit: true
//!-output
*/
func main() {
fset := token.NewFileSet()
f, err := parser.ParseFile(fset, "p.go", src, 0)
if err != nil {
log.Fatal(err)
}
conf := types.Config{}
pkg, err := conf.Check("typesets", fset, []*ast.File{f}, nil)
if err != nil {
log.Fatal(err)
}
ShowImplicit(pkg)
}