Generalised the lenses

Fixes #2

I left the tutorial alone as the generalised types are probably more confusing.