Indeed. In hindsight, I should've predicted that.
I think you are SOOL then, in general. I'd suggest using ~[]E directly and
do the "scalar" case as a 1-element slice then.

For a function, you can write `func F[E any](e ...E)`, which makes it
callable with any number of arguments. Or `func F[E any](e E, es ...E)`,
which guarantees that there is at least one argument.

It's probably doesn't seem ideal, but it's the only thing that works right
now.

On Fri, Aug 12, 2022 at 3:49 PM TheDiveO <harald.albre...@gmx.net> wrote:

> Gave it a try on playground, but this unfortunately raises the error "term
> cannot be a type parameter" for the E | ~[]E.
>
> On Friday, August 12, 2022 at 3:18:05 PM UTC+2 axel.wa...@googlemail.com
> wrote:
>
>> type ScalarOrSlice[E any] interface {
>>     E | ~[]E
>> }
>>
>> func New[E any, T ScalarOrSlice[E]](v T) { … }
>>
>> Though I haven't tested this.
>>
>> On Fri, Aug 12, 2022 at 3:07 PM TheDiveO <harald....@gmx.net> wrote:
>>
>>> I would like to provide a generics-based type-safe API that accepts
>>> either a scalar or slice of some type T (not a type parameter), that is,
>>> the type constraint is (if I'm not mistaken) "T | []T".
>>>
>>> While I understand that this constraint would be declared as an
>>> interface (simplified example)...
>>>
>>> type interface ScalarOrSlice { int | []int }
>>>
>>> ...the straightforward generics-powered func definition...
>>>
>>> func New[E ScalarOrSlice](e E) { ... }
>>>
>>> either gives me "int" or "[]int". Is it somehow possible to derive the
>>> "int" type at compile time so that I have an, say, "F" that is always the
>>> scalar type of E?
>>>
>>> Thanks, TheDiveO
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to golang-nuts...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/0ae02f54-67d6-4070-a11f-36c31a961598n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/golang-nuts/0ae02f54-67d6-4070-a11f-36c31a961598n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/a0c2e8bb-d1bf-4fd0-ac2e-6b062be613e9n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/a0c2e8bb-d1bf-4fd0-ac2e-6b062be613e9n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfF271yQ4S8TUBQuva3nO44CYtVFZqDiMPuV00VTmU9%2Bbw%40mail.gmail.com.

Reply via email to