Can also return `{error, term()}`.