Went a bit crazy with type level stuff again