content: {-# LANGUAGE DeriveDataTypeable #-}
  {-# LANGUAGE DeriveGeneric #-}
  
  module Distribution.Types.ModuleReexport (
      ModuleReexport(..)
  ) where
  
  import Prelude ()
  import Distribution.Compat.Prelude
  
  import qualified Distribution.Compat.ReadP as Parse
  import Distribution.ModuleName
  import Distribution.Text
  import Distribution.Types.PackageName
  
  import Text.PrettyPrint as Disp
  
  -- -----------------------------------------------------------------------------
  -- Module re-exports
  
  data ModuleReexport = ModuleReexport {
         moduleReexportOriginalPackage :: Maybe PackageName,
         moduleReexportOriginalName    :: ModuleName,
         moduleReexportName            :: ModuleName
      }
      deriving (Eq, Generic, Read, Show, Typeable, Data)
  
  instance Binary ModuleReexport
  
  instance Text ModuleReexport where
      disp (ModuleReexport mpkgname origname newname) =
            maybe Disp.empty (\pkgname -> disp pkgname <<>> Disp.char ':') mpkgname
         <<>> disp origname
        <+> if newname == origname
              then Disp.empty
              else Disp.text "as" <+> disp newname
  
      parse = do
        mpkgname <- Parse.option Nothing $ do
                      pkgname <- parse
                      _       <- Parse.char ':'
                      return (Just pkgname)
        origname <- parse
        newname  <- Parse.option origname $ do
                      Parse.skipSpaces
                      _ <- Parse.string "as"
                      Parse.skipSpaces
                      parse
        return (ModuleReexport mpkgname origname newname)
  