Source file
test/typeparam/issue51303.go
1
2
3
4
5
6
7 package main
8
9 import (
10 "fmt"
11 )
12
13 func main() {
14 x := [][]int{{1}}
15 y := [][]int{{2, 3}}
16 IntersectSS(x, y)
17 }
18
19 type list[E any] interface {
20 ~[]E
21 Equal(x, y E) bool
22 }
23
24
25 type ss[E comparable, T []E] []T
26
27 func (ss[E, T]) Equal(a, b T) bool {
28 return SetEq(a, b)
29 }
30
31 func IntersectSS[E comparable](x, y [][]E) [][]E {
32 return IntersectT[[]E, ss[E, []E]](ss[E, []E](x), ss[E, []E](y))
33 }
34
35 func IntersectT[E any, L list[E]](x, y L) L {
36 var z L
37 outer:
38 for _, xe := range x {
39 fmt.Println("xe", xe)
40 for _, ye := range y {
41 fmt.Println("ye", ye)
42 fmt.Println("x", x)
43 if x.Equal(xe, ye) {
44 fmt.Println("appending")
45 z = append(z, xe)
46 continue outer
47 }
48 }
49 }
50 return z
51 }
52
53 func SetEq[S []E, E comparable](x, y S) bool {
54 fmt.Println("SetEq", x, y)
55 outer:
56 for _, xe := range x {
57 for _, ye := range y {
58 if xe == ye {
59 continue outer
60 }
61 }
62 return false
63 }
64 return true
65 }
66
View as plain text