more work in typeclasses
layers!