Dialyzer and raise exception behavior

Whatever You choose to return from an error will be catched if it does not specify the right type for the error return, in the smaller function. While your hello function could not, because dialyzer assume it is correctly typed as boolean in case of success, and does not care about the error path.