added description...TODO factor out common structure
action, parser, and name came be an algebraic type (not sure about constructor)