1. 9
  1.  

  2. 2

    I love union (sum) types! It’s a great way to define recursive types in an expressive and efficient fashion. For Advent of Code last year I used them to solve the “Snail Problem” Day 18

    struct Snail
        left::Union{Int, Snail}
        right::Union{Int, Snail}
    end
    

    Github

    I was able to do it functionally in Julia, relying on Multiple Dispatch and Union types. See a solution written in Go that’s twice as many lines and a lot harder to read, not to pick on the author but rather the language that requires a lot more work to parse and reparse a structure that can be represented naturally with the right types.

    1. 2

      minor pedantic note - union types aren’t the same as sum types (they are sometimes known as untagged and tagged unions respectively). here’s one example of where that makes a difference.