module Distribution.Types.UnqualComponentName
  ( UnqualComponentName, unUnqualComponentName, mkUnqualComponentName
  , packageNameToUnqualComponentName, unqualComponentNameToPackageName
  ) where
import Distribution.Compat.Prelude
import Distribution.Utils.ShortText
import Prelude ()
import Distribution.Parsec.Class
import Distribution.ParseUtils        (parsePackageName)
import Distribution.Pretty
import Distribution.Text
import Distribution.Types.PackageName
newtype UnqualComponentName = UnqualComponentName ShortText
  deriving (Generic, Read, Show, Eq, Ord, Typeable, Data,
            Semigroup, Monoid) 
unUnqualComponentName :: UnqualComponentName -> String
unUnqualComponentName (UnqualComponentName s) = fromShortText s
mkUnqualComponentName :: String -> UnqualComponentName
mkUnqualComponentName = UnqualComponentName . toShortText
instance IsString UnqualComponentName where
  fromString = mkUnqualComponentName
instance Binary UnqualComponentName
instance Pretty UnqualComponentName where
  pretty = showToken . unUnqualComponentName
instance Parsec UnqualComponentName where
  parsec = mkUnqualComponentName <$> parsecUnqualComponentName
instance Text UnqualComponentName where
  parse = mkUnqualComponentName <$> parsePackageName
instance NFData UnqualComponentName where
  rnf (UnqualComponentName pkg) = rnf pkg
packageNameToUnqualComponentName :: PackageName -> UnqualComponentName
packageNameToUnqualComponentName = mkUnqualComponentName . unPackageName
unqualComponentNameToPackageName :: UnqualComponentName -> PackageName
unqualComponentNameToPackageName = mkPackageName . unUnqualComponentName