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.