Text this: A Constraint-Based Approach to Guarded Algebraic Data Types.