use compile instead of union