Allow Addr# at top level in source Haskell
Motivation
GHC currently disallows Addr# at the top level in source Haskell. However, Addr# is allowed at the top level in Core, and when compiling with optimizations, GHC aggressively floats all Addr# literals to the top level. This source-haskell restriction can be mildly annoying. It requires users to wrap top-level literals in a Ptr data constructor. Although GHC's optimizations prevent the data constructor allocations from actually happening, it is an unnecessary burden for users.
Proposal
Relax the restriction on Addr# literals at the top level. Currently, such literals are rejected by dsTopLHsBinds (via isUnliftedHsBind). The check could be relaxed to allow top-level Addr# when the RHS is an Addr# literal. For example:
idAddr :: Addr# -> Addr#
idAddr x = x
-- litA would be accepted by GHC
litA :: Addr#
litA = "foo"#
-- litB would be rejected by GHC
litA :: Addr#
litA = idAddr "foo"#