News for hackers. Stuff that matters.
Re:What's in the Box? by Twisol on Monday April 19, 2021 @04:52PM (#26867850)
From my perspective, these really are more like enums than unions. Rust enums cover C-style enums as a limiting case:

    enum Result {
      Ok,
      Err,
    }
If this was all you got, you'd need to return something like `(status, value, err)` to model fallible functions. This is not unlike Go's `value, err` convention, except that `status` is additionally inlined into `value` as a sentinel `nil`. This does nothing to prevent you from using the `value` if an error has occurred, or vice versa.

Instead, we like to carry data _alongside_ the enum tags:

    // using named fields instead of tuple structs, for clarity
    enum Result<T, E> {
        Ok {value: T},
        Err {err: E},
    }
Now we can return a single `Result,` and you can only use `value` if the function succeeded, and you can only use `err` if the function failed.

There are no comments on this comment yet.