package slicesext

import (
	"golang.org/x/exp/constraints"
	"golang.org/x/exp/slices"
)

func UniqueJoin[T constraints.Ordered](ss ...[]T) []T {
	var length int
	for _, s := range ss {
		length += len(s)
	}
	r := make([]T, length)
	var i int
	for _, s := range ss {
		i += copy(r[i:], s)
	}
	slices.Sort(r)
	return slices.Compact(r)
}