design: adds a new argument: types
completes main
updates deps;
adds test fixtures and test cases
merge instead of mix;