{-# LANGUAGE DerivingStrategies #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} ----------------------------------------------------------------------------- -- | -- Module : GHC.JS.Ident -- Copyright : (c) The University of Glasgow 2001 -- License : BSD-style (see the file LICENSE) -- -- Maintainer : Jeffrey Young -- Luite Stegeman -- Sylvain Henry -- Josh Meredith -- Stability : experimental -- -- -- * Domain and Purpose -- -- GHC.JS.Ident defines identifiers for the JS backend. We keep this module -- separate to prevent coupling between GHC and the backend and between -- unrelated modules is the JS backend. -- -- * Consumers -- -- The entire JavaScript Backend consumes this module including modules in -- GHC.JS.\* and modules in GHC.StgToJS.\* -- -- * Additional Notes -- -- This module should be kept as small as possible. Anything added to it -- will be coupled to the JS backend EDSL and the JS Backend including the -- linker and rts. You have been warned. -- ----------------------------------------------------------------------------- module GHC.JS.Ident ( Ident(..) , name ) where import GHC.Prelude import GHC.Data.FastString import GHC.Types.Unique import GHC.Utils.Outputable -------------------------------------------------------------------------------- -- Identifiers -------------------------------------------------------------------------------- -- | A newtype wrapper around 'FastString' for JS identifiers. newtype Ident = TxtI { identFS :: FastString } deriving stock (Show, Eq) deriving newtype (Uniquable, Outputable) -- | To give a thing a name is to have power over it. This smart constructor -- serves two purposes: first, it isolates the JS backend from the rest of GHC. -- The backend should not explicitly use types provided by GHC but instead -- should wrap them such as we do here. Second it creates a symbol in the JS -- backend, but it does not yet give that symbols meaning. Giving the symbol -- meaning only occurs once it is used with a combinator from @GHC.JS.Make@. name :: FastString -> Ident name = TxtI