I'm wondering the purpose of silently returning in such a case; shouldn't we throw? Also, maybe testing for `!val` would cover more cases.