seperated token types into it's own trait as well as the reduction function
added value token trait to differentiate tokens during element composition