On Tue, 2 Sept 2025 at 12:56, Cliff <cliff.programs.sou...@gmail.com> wrote:

> From an implementation, language theory, and sanity point of view: putting
> non-concrete types in a sum type won't work. If the design principles of go
> demand interfaces in sum types, they will never be workable.


Why not? In a union they don't work, but in a sum I can't see a reason why
they wouldn't work. If I'm overlooking something, I'd be super interested
(I intend to give a talk on this topic soon, so I would want to avoid being
wrong).

Have you seen https://github.com/golang/go/issues/54685 ? It has a very
well-worked design for how sum types could work in Go. I have not found a
problem with it and it doesn't preclude using interfaces.


> The one 'escape hatch' for this I could see is using bounded interfaces
> where you limit the concrete types that can have that interface and then
> use those.
>
>
> type example interface (typea | typeb)  {
>     area() float64
>     perim() float64
> }
>
> You could use an interface like that in a sum type because it is
> explicitly bounded, but I think it's an ugly concept that is only necessary
> if you want to wedge an open-set behavioral contract concept into a closed
> set identity concept.  A concept and syntax similar to this explanation (in
> support of generics) https://go.dev/blog/intro-generics would be
> necessary.
>
> it is my opinion that sum types are low-hanging fruit that demand no
> change if implemented without interfaces. They remain as complicated and
> disruptive as the team has maintained if you do. There is huge value in a
> small language and using extension budget for a feature like this this is a
> social/value judgement that has technical impacts.
>
> *tldr; Sum types are trivial if you don't allow behavioral contracts or
> anonymous types in. Sum types are doable if you allow type restrictions on
> interfaces. Sum types are not doable without a) compromise or b) change.*
>
> Thanks for looking y'all - seriously - this was a design exercise for me -
> and it helped me understand the go-team's perspective.
>
> On Tuesday, September 2, 2025 at 5:04:36 AM UTC-4 Axel Wagner wrote:
>
>> I should proof-read *before* hitting send:
>>
>> On Tue, 2 Sept 2025 at 11:00, Axel Wagner <axel.wa...@googlemail.com>
>> wrote:
>>
>>> It seems most likely (based on statements by the Go team) that we would
>>> not want to add a new concept that has this much semantic overlap with
>>> `interface{ a | b | c }`. But if we did that, the result would lack most of
>>> the power people want from it.
>>>
>>
>> To clarify: by "if we did that" I mean "reuse `interface{ a | b | c }`",
>> not "add a new concept".
>>
> --
> 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 visit
> https://groups.google.com/d/msgid/golang-nuts/f9d02f5d-0fd2-41ef-8882-89aa49cf602an%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/f9d02f5d-0fd2-41ef-8882-89aa49cf602an%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 visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGsx4mLb2Up5QawJQDOKwQGjQPp0CA8bdkT9qyDwWOydw%40mail.gmail.com.

Reply via email to