I think I'm missing something. How is nil not an inhabitant? On Thu, Jun 18, 2020 at 6:48 PM Bryan C. Mills <bcmi...@google.com> wrote: > > 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. >> >> -- >> 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.
-- 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/CANG3jXJX0gf%3D%3DniCa4MtQ7-3Q6rU%3DQr2tTpKntMVMqDVOo4BMw%40mail.gmail.com.