Oh, another motivation might be: users wish to use `Addr` without incurring a dependency on `primitive`.

On Thu, Oct 25, 2018 at 11:24 AM Daniel Cartwright <chessai1996@gmail.com> wrote:
Motivation: There are a lot of places in base where 'Ptr a' is used in place of 'Addr', because in base there is no 'Addr', only 'Addr#'. The problem lies in the fact that many of these uses of 'Ptr a' are lying; the 'a' value is meaningless. Authors of functions therein have used things like 'Ptr ()', 'Ptr Word8', 'Ptr a', but these types do not mean what they say they mean - they're just Addr. There are probably other motivations for this that I can't think of off the top of my head right now.