Algebraically-defined Data Types (ADTs) for Ruby