
#14195: Generalize makeStableName# -------------------------------------+------------------------------------- Reporter: andrewthad | Owner: (none) Type: feature request | Status: patch Priority: low | Milestone: Component: Compiler | Version: 8.2.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Phab:D3928 Wiki Page: | -------------------------------------+------------------------------------- Changes (by simonpj): * cc: simonmar (added) Comment: Hang on. Making a new stable name has an I/O effect: it modifies a single, shared stable name table. When things have an I/O effect we put them in the IO monad. To put it more concretely, with the new signature I could say {{{ mks v :: a -> StableName# a mks v = runST (mkStableName# v) }}} But as the original paper points out, making a fresh stable name is not a pure operation. Copying Simon Marlow -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14195#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler