{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE GeneralizedNewtypeDeriving #-} module Distribution.Types.Module ( Module(..) ) where import Prelude () import Distribution.Compat.Prelude import qualified Distribution.Compat.ReadP as Parse import qualified Text.PrettyPrint as Disp import Distribution.Text import Distribution.Types.UnitId import Distribution.ModuleName -- | A module identity uniquely identifies a Haskell module by -- qualifying a 'ModuleName' with the 'UnitId' which defined -- it. This type distinguishes between two packages -- which provide a module with the same name, or a module -- from the same package compiled with different dependencies. -- There are a few cases where Cabal needs to know about -- module identities, e.g., when writing out reexported modules in -- the 'InstalledPackageInfo'. data Module = Module DefUnitId ModuleName deriving (Generic, Read, Show, Eq, Ord, Typeable, Data) instance Binary Module instance Text Module where disp (Module uid mod_name) = disp uid <<>> Disp.text ":" <<>> disp mod_name parse = do uid <- parse _ <- Parse.char ':' mod_name <- parse return (Module uid mod_name) instance NFData Module where rnf (Module uid mod_name) = rnf uid `seq` rnf mod_name