Less precise types for `halt` and `empty`

The precise types are not exposed to the users of the library.