News for hackers. Stuff that matters.
Re:Experience Report: 6 months of Go by throwaway894345 on Sunday May 01, 2022 @06:38PM (#31229416)
> You can have robust and ergonomic code around nils if they are part of your type signatures

Go has `nil` built into the type signature, but the problem is that all reference types are inherently nil-able, and value types can't be nil (although they can have their own in-band zero values). This means you either pass around values (with the entailed overhead and copy semantics) or you pass around nil-able references.

Why would unions be more ergonomic than sum types? Presumably they would have the same ergonomics?

Re:Experience Report: 6 months of Go by dgb23 on Monday May 02, 2022 @09:32AM (#31234887)
> Why would unions be more ergonomic than sum types? Presumably they would have the same ergonomics?

For this use case (can be a some type OR nil) they are more ergonomic because it is an actual OR, not a separate container. You want the thing as-is and handle the case where it isn't there not go through an intermediary type.

Re:Experience Report: 6 months of Go by throwaway894345 on Monday May 02, 2022 @02:12PM (#31238697)
I'm not sure I'm following. Rust allows:

    println!("{}", if x == None { "foo" } else { "bar" });
How would unions make this more ergonomic? For example, in Python (with type annotations), you would have to do:

    print("foo" if x == None else "bar")