Ruby gem for non-linear pattern-matching against unfree data types