some more structure thinking and playing with types