Algebraic Data Types for Ruby