initial stab at macro
first impl of defdata with constraints