I may have gone too far with the data types

No primitives allowed. Code easier to read? Who knows.