This is really neat. As a professional Scala hacker who's played a bit with SML/OCaml, I always seem to find problems that would be best solved using discriminated unions like this, but I've never loved the traditional Scala idioms for achieving that sort of thing. I'm interested in Shapeless, but my coworkers are suspicious and I'm too inexpert in it to really argue strongly for it. This looks like something useful that I can implement when a union type is really what I need, without having to get Shapeless in the door.