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 <javascript:>> 
> 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, []
}
 

>  
>>
>>>
>>> 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 golan...@googlegroups.com <javascript:>.
>> 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/a5f078ab-1464-4395-8f41-89a7aa687f0bo%40googlegroups.com.

Reply via email to