On Sat, Jun 20, 2020 at 11:03 AM T L <tapir....@gmail.com> wrote:

>
>
> On Saturday, June 20, 2020 at 10:21:56 AM UTC-4, Axel Wagner wrote:
>>
>> I would assume it's
>>
>> type MapConstraint(type K comparable, V interface{}) interface {
>>     type map[K]V
>> }
>>
>> func F(type M MapConstraint(K, V), K comparable, V interface{}) (m M) {
>> }
>>
>> Note that you are under no obligation to make use of a type-parameter if
>> you don't need it.
>>
>
> I don't very understand this. Can a slice value be used as the argument of
> the F function?
>
For that, I think you'd need the interface to be:
type MapSliceConstraint(type K comparable, V interface{}) interface {
        type map[K]V, []V
}

I'm not quite sure how to eliminate the useless K type-param for slices,
though.

Note: the relevant draft design section is:
https://go.googlesource.com/proposal/+/refs/heads/master/design/go2draft-type-parameters.md#type-parameters-in-type-lists

Here's an almost working example:
https://go2goplay.golang.org/p/qcdfl0tuHlb

It looks like there's a bug in the type-parameter constraint checking
because in the above example code, I get:

type checking failed for main

prog.go2:11:39: K does not satisfy comparable

This, despite the type parameter definition literally requiring that K be
comparable:
func genLen(type T MapSliceConstraint(K, V), K *comparable*, V
interface{})(collection T) int {
        return len(collection)
}
(example without a main() to reduce clutter:
https://go2goplay.golang.org/p/1gqiYuDELuI)

>
>
>>
>> On Sat, Jun 20, 2020 at 4:14 PM T L <tapi...@gmail.com> wrote:
>>
>>> I mean I don't care about the element and key types of the parameter
>>> type.
>>>
>>> For a simple example, I want to define a generic function which prints
>>> the length of a container (do do some other things):
>>>
>>> func Print(type T Container) (v T) {
>>>    // ... do some things
>>>
>>>    fmt.Println(len(v))
>>>
>>>    // ... do some things
>>> }
>>>
>>> On Saturday, June 20, 2020 at 9:16:39 AM UTC-4, T L wrote:
>>>>
>>>> .
>>>>
>>> --
>>> 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 golan...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/4f42e5e9-f991-4ee7-a043-5350a62f787fo%40googlegroups.com
>>> <https://groups.google.com/d/msgid/golang-nuts/4f42e5e9-f991-4ee7-a043-5350a62f787fo%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/f841c497-8c29-4f16-a027-2c446f1a94b6o%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/f841c497-8c29-4f16-a027-2c446f1a94b6o%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/CANrC0BjPALDX6%2BT-tCpH3aaLSLQqQb7LExCzCuzL5uPGFxgxJw%40mail.gmail.com.

Reply via email to