A lightweight 2-state sum type a la Haskell's Either