1. 7
  1.  

  2. 0

    But how far can you take this? Does this work for arbitrary sum types? As far as I can tell, Eiffel has none (sum types), which is a terribly strange decision for a language that was designed around contracts and safety.