{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
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