dev: move shot code into Shot
dev: refactor. Learning to think functionally...