gcm: design some types