On Thu, Jun 18, 2020 at 4:19 PM 'Axel Wagner' via golang-nuts < golang-nuts@googlegroups.com> wrote:
> Addendum: In Go, every type needs to be inhabited by at least one value - > it's zero value. And we already have a type that can take *exactly* one > value, namely struct{}. > That is true, but struct{} is the unit type — not the bottom element of the interface-type lattice. struct{} can be added as a field of any struct with no effect on comparability or equality, and adds no bits of information (it is a multiplicative unit). As an interface value, struct{} carries one “bit” of information: its type. But struct{} has no methods and is not assignable to any interface type: therefore, it is not the bottom type of the interface lattice. In contrast, the interface of the empty type-list, if such a thing could exist at run-time, would presumably have only one value as well: the nil interface value. The nil interface value is a member of every other interface type, so the empty type-list would be assignable to every other interface type (it is the bottom of the interface lattice). Conceptually, it has all possible methods, but there would be no point in calling them: they all result in a nil-panic. As a struct field, the empty interface is also a multiplicative unit (it adds no bits of information). However, it is also an additive unit: the union of the empty type-list and any other interface is identical to the other interface (because every other interface already admits the nil interface value). On Thu, Jun 18, 2020, 22:13 Axel Wagner <axel.wagner...@googlemail.com> > wrote: > >> These arguments would be more convincing, if Go wouldn't already reject >> interfaces impossible to implement: https://play.golang.org/p/dYm8js26qml >> >> On Thu, Jun 18, 2020, 17:26 Jesper Louis Andersen < >> jesper.louis.ander...@gmail.com> wrote: >> >>> It is a type which cannot be inhabited by a term. These exist and often >>> have uses. As Bryan wrote they also completes the type lattice, so >>> rejecting them is often a lot of work for little gain. >>> >>> If you want examples, look up phantom types, where an uninhabited type >>> is used as a tag for ensuring compile time restrictions. >>> >>> On Wed, Jun 17, 2020, 22:09 jimmy frasche <soapboxcic...@gmail.com> >>> wrote: >>> >>>> This isn't a bug per se, but I can file one if requested. >>>> >>>> https://go2goplay.golang.org/p/AWynhg6ya7h >>>> >>>> Since embedding interfaces with type lists uses the intersection of >>>> the items in the type list, it's possible to create an interface that >>>> cannot be satisfied by any type. >>>> >>>> Currently this does not cause an error until you attempt to >>>> instantiate something that uses such an interface as a bound. >>>> >>>> I think it would be more useful to raise the error when defining the >>>> interface that cannot be used as it's likely an error—or at least I >>>> can see no valid use for creating an unsatisfiable constraint. >>>> >>>> -- >>>> 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/CANG3jXJt_n1HrRMV1SBcaurXOrXVJxXrKN_F%3DtgMAcMJ%2BPOLcg%40mail.gmail.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/CAGrdgiVPP21fky2qcgfnAYjH6H047C1A0Y_V%3Doa%3DB3pTWRX68g%40mail.gmail.com >>> <https://groups.google.com/d/msgid/golang-nuts/CAGrdgiVPP21fky2qcgfnAYjH6H047C1A0Y_V%3Doa%3DB3pTWRX68g%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- > You received this message because you are subscribed to a topic in the > Google Groups "golang-nuts" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/golang-nuts/CsA1FJKZ4qs/unsubscribe. > To unsubscribe from this group and all its topics, 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/CAEkBMfFwkVmbva1bRYbHX3D6oUhufHvdr-Ebb0GY0u3j_fyTUA%40mail.gmail.com > <https://groups.google.com/d/msgid/golang-nuts/CAEkBMfFwkVmbva1bRYbHX3D6oUhufHvdr-Ebb0GY0u3j_fyTUA%40mail.gmail.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/CAKWVi_QQxkGAcdWNSozOeujF-vw2_mJNLuFibVN0JDsvByELcQ%40mail.gmail.com.