When I say 'it's not Go-1like' I mean that MyInt type is not equal to int type 
in Go1 type system. 
reflect.DeepEqual(int(0), MyInt(0)) returns false.
Type assertion fails.
That's why I call it 'newtype'.

But type lists with non-interface types have a different logic. MyInt type 
is equal to int.
But, also, it requires explicit conversation to interface 
type: https://go2goplay.golang.org/p/2Ue3BlYBXyB. You cannot use underlying 
type as T Constr.  
It seems incorrect, when I write `type int` it means that only `int` should 
be permitted, not `MyInt/MySuperInt/etc.`




воскресенье, 28 июня 2020 г. в 06:13:31 UTC+3, Ian Lance Taylor: 

> On Sat, Jun 27, 2020 at 3:06 PM tdakkota <tanc1...@gmail.com> wrote:
> >
> > I think, if I want int/[]int, I should use int/[]int or just declare a 
> domain specific alias.
> > MyInt/[]MyInt should implement Lesser/Min/etc interface. It can declare 
> specific comparison rules.
> >
> > Min implementation can be like: 
> https://go2goplay.golang.org/p/Fgo2fJAlKXD (this code does not compile, I 
> don't know why)
> >
> > My point is that this decision is not Go1-like and can cause unexpected 
> runtime errors.
>
> If we don't match on underlying types, then we can't use the <
> operator on elements of a value of type []MyInt. Requiring people to
> explicitly declare a Less method on an integer type seems like
> unnecessary boilerplate that should be avoided. If we're going to do
> that, why have type lists at all? Why not always require people to
> declare a method?
>
> Your example doesn't compile because Go doesn't have any conversion
> from a slice of one type to a slice of a different type.
>
> Go today has nothing like type lists. I don't agree that having type
> lists match underlying types is not Go1-like, because I don't think
> current Go has anything to say about type lists.
>
> Ian
>
>
> > суббота, 27 июня 2020 г. в 23:03:25 UTC+3, Ian Lance Taylor:
> >>
> >> On Sat, Jun 27, 2020 at 12:35 PM a b <tanc1...@gmail.com> wrote:
> >> >
> >> > Newtype is a expression like
> >> > type MyInt int
> >> >
> >> > It's not the same type as int, so why it's permitted?
> >> > In Go1 you must perform explicit conversion.
> >>
> >> Because if you have a []MyInt, it would be nice to be able to pass
> >> that to a function like slices.Min. Note that you can't directly
> >> convert []MyInt to []int.
> >>
> >> 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...@googlegroups.com.
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/5b246c09-e64b-47ff-b2ef-1c4f9ea7ea94n%40googlegroups.com
> .
>

-- 
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/e21310a0-d7b4-4c2e-9b6d-8ff8530522b8n%40googlegroups.com.

Reply via email to