type level enforcement to avoid affine (affine ..) state