Algebraic DataTypes another go