(1) feels like an implementation detail of GHCJS that has been
promoted into something everyone will have to deal with. I would like
us to give this design some more thought (preferably with input from
Duncan) before we merge these changes.
(2) is fine.
I haven't looked in detail at (3), but improving code reuse seems
reasonable. Perhaps we should move the shared functions to
D.S.GHC.Base or something to not complicate the API offered by
D.S.GHC.