// run -gcflags=-G=3

// Copyright 2022 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 main

import (
	"fmt"
)

func main() {
	x := [][]int{{1}}
	y := [][]int{{2, 3}}
	IntersectSS(x, y)
}

type list[E any] interface {
	~[]E
	Equal(x, y E) bool
}

// ss is a set of sets
type ss[E comparable, T []E] []T

func (ss[E, T]) Equal(a, b T) bool {
	return SetEq(a, b)
}

func IntersectSS[E comparable](x, y [][]E) [][]E {
	return IntersectT[[]E, ss[E, []E]](ss[E, []E](x), ss[E, []E](y))
}

func IntersectT[E any, L list[E]](x, y L) L {
	var z L
outer:
	for _, xe := range x {
		fmt.Println("xe", xe)
		for _, ye := range y {
			fmt.Println("ye", ye)
			fmt.Println("x", x)
			if x.Equal(xe, ye) {
				fmt.Println("appending")
				z = append(z, xe)
				continue outer
			}
		}
	}
	return z
}

func SetEq[S []E, E comparable](x, y S) bool {
	fmt.Println("SetEq", x, y)
outer:
	for _, xe := range x {
		for _, ye := range y {
			if xe == ye {
				continue outer
			}
		}
		return false // xs wasn't found in y
	}
	return true
}
