On Sat, Jun 20, 2020 at 8:08 PM T L <tapir....@gmail.com> wrote:
>
>
>
> On Saturday, June 20, 2020 at 3:08:42 PM UTC-4, David Finkel wrote:
>>
>>
>>
>> On Sat, Jun 20, 2020 at 11:03 AM T L <tapi...@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)
>
>
>
> Thanks for making this example.
>
> However, it almost reach my upper limit understanding ability to get the 
> implementation.
> I looks some bad practices in using C++ template.
>
> Is it good to add a Kind list constraint? For example,
>
> type MapOrSlice interface {
>    kind map, []
> }

We've already decided in this design draft that we are not going to
permit all possible constraints.  Therefore, this is the kind of
question that needs to be answered based on experience using real
code.  Do people want or need to write real code that permits
declaring that some type parameter is a map or a slice, without
knowing anything else about the type?  I don't see how such
information would be useful at all.  Without knowing anything about
the key or element types of the map/slice, it would be very difficult
to use such a type parameter in any useful way.  And quite apart from
that, when is it useful for people to write a function that takes
either a map or a slice, but nothing else?   We need real examples of
real code that people want to write, not theoretical ideas for code
that people might in theory want to write.  Thanks.

Ian

-- 
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/CAOyqgcV0h_enPJSHkx80D7SM-7vOSYKwQGJU6VdKvNjM_vLyRQ%40mail.gmail.com.

Reply via email to