Quick and dirty limited tagged union, because std.variant can't do recursive definitions
See Source File