module Hix.Data.PackageName where import Data.Aeson (FromJSON, FromJSONKey, ToJSON, ToJSONKey) import qualified Data.Set as Set import qualified Distribution.Package as Cabal import Distribution.Package (depPkgName, mkPackageName) import Distribution.Pretty (Pretty (pretty)) import Distribution.Types.Dependency (Dependency) import Hix.Class.EncodeNix (EncodeNixKey) import Hix.Pretty (prettyText) newtype PackageName = PackageName Text deriving stock (PackageName -> PackageName -> Bool (PackageName -> PackageName -> Bool) -> (PackageName -> PackageName -> Bool) -> Eq PackageName forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: PackageName -> PackageName -> Bool == :: PackageName -> PackageName -> Bool $c/= :: PackageName -> PackageName -> Bool /= :: PackageName -> PackageName -> Bool Eq, Int -> PackageName -> ShowS [PackageName] -> ShowS PackageName -> String (Int -> PackageName -> ShowS) -> (PackageName -> String) -> ([PackageName] -> ShowS) -> Show PackageName forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> PackageName -> ShowS showsPrec :: Int -> PackageName -> ShowS $cshow :: PackageName -> String show :: PackageName -> String $cshowList :: [PackageName] -> ShowS showList :: [PackageName] -> ShowS Show, (forall x. PackageName -> Rep PackageName x) -> (forall x. Rep PackageName x -> PackageName) -> Generic PackageName forall x. Rep PackageName x -> PackageName forall x. PackageName -> Rep PackageName x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. PackageName -> Rep PackageName x from :: forall x. PackageName -> Rep PackageName x $cto :: forall x. Rep PackageName x -> PackageName to :: forall x. Rep PackageName x -> PackageName Generic) deriving newtype (String -> PackageName (String -> PackageName) -> IsString PackageName forall a. (String -> a) -> IsString a $cfromString :: String -> PackageName fromString :: String -> PackageName IsString, Eq PackageName Eq PackageName => (PackageName -> PackageName -> Ordering) -> (PackageName -> PackageName -> Bool) -> (PackageName -> PackageName -> Bool) -> (PackageName -> PackageName -> Bool) -> (PackageName -> PackageName -> Bool) -> (PackageName -> PackageName -> PackageName) -> (PackageName -> PackageName -> PackageName) -> Ord PackageName PackageName -> PackageName -> Bool PackageName -> PackageName -> Ordering PackageName -> PackageName -> PackageName forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: PackageName -> PackageName -> Ordering compare :: PackageName -> PackageName -> Ordering $c< :: PackageName -> PackageName -> Bool < :: PackageName -> PackageName -> Bool $c<= :: PackageName -> PackageName -> Bool <= :: PackageName -> PackageName -> Bool $c> :: PackageName -> PackageName -> Bool > :: PackageName -> PackageName -> Bool $c>= :: PackageName -> PackageName -> Bool >= :: PackageName -> PackageName -> Bool $cmax :: PackageName -> PackageName -> PackageName max :: PackageName -> PackageName -> PackageName $cmin :: PackageName -> PackageName -> PackageName min :: PackageName -> PackageName -> PackageName Ord, Maybe PackageName Value -> Parser [PackageName] Value -> Parser PackageName (Value -> Parser PackageName) -> (Value -> Parser [PackageName]) -> Maybe PackageName -> FromJSON PackageName forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe a -> FromJSON a $cparseJSON :: Value -> Parser PackageName parseJSON :: Value -> Parser PackageName $cparseJSONList :: Value -> Parser [PackageName] parseJSONList :: Value -> Parser [PackageName] $comittedField :: Maybe PackageName omittedField :: Maybe PackageName FromJSON, FromJSONKeyFunction [PackageName] FromJSONKeyFunction PackageName FromJSONKeyFunction PackageName -> FromJSONKeyFunction [PackageName] -> FromJSONKey PackageName forall a. FromJSONKeyFunction a -> FromJSONKeyFunction [a] -> FromJSONKey a $cfromJSONKey :: FromJSONKeyFunction PackageName fromJSONKey :: FromJSONKeyFunction PackageName $cfromJSONKeyList :: FromJSONKeyFunction [PackageName] fromJSONKeyList :: FromJSONKeyFunction [PackageName] FromJSONKey, [PackageName] -> Value [PackageName] -> Encoding PackageName -> Bool PackageName -> Value PackageName -> Encoding (PackageName -> Value) -> (PackageName -> Encoding) -> ([PackageName] -> Value) -> ([PackageName] -> Encoding) -> (PackageName -> Bool) -> ToJSON PackageName forall a. (a -> Value) -> (a -> Encoding) -> ([a] -> Value) -> ([a] -> Encoding) -> (a -> Bool) -> ToJSON a $ctoJSON :: PackageName -> Value toJSON :: PackageName -> Value $ctoEncoding :: PackageName -> Encoding toEncoding :: PackageName -> Encoding $ctoJSONList :: [PackageName] -> Value toJSONList :: [PackageName] -> Value $ctoEncodingList :: [PackageName] -> Encoding toEncodingList :: [PackageName] -> Encoding $comitField :: PackageName -> Bool omitField :: PackageName -> Bool ToJSON, ToJSONKeyFunction [PackageName] ToJSONKeyFunction PackageName ToJSONKeyFunction PackageName -> ToJSONKeyFunction [PackageName] -> ToJSONKey PackageName forall a. ToJSONKeyFunction a -> ToJSONKeyFunction [a] -> ToJSONKey a $ctoJSONKey :: ToJSONKeyFunction PackageName toJSONKey :: ToJSONKeyFunction PackageName $ctoJSONKeyList :: ToJSONKeyFunction [PackageName] toJSONKeyList :: ToJSONKeyFunction [PackageName] ToJSONKey, PackageName -> Text (PackageName -> Text) -> EncodeNixKey PackageName forall a. (a -> Text) -> EncodeNixKey a $cencodeNixKey :: PackageName -> Text encodeNixKey :: PackageName -> Text EncodeNixKey) instance Pretty PackageName where pretty :: PackageName -> Doc pretty (PackageName Text n) = Text -> Doc prettyText Text n fromCabal :: Cabal.PackageName -> PackageName fromCabal :: PackageName -> PackageName fromCabal = String -> PackageName forall a. IsString a => String -> a fromString (String -> PackageName) -> (PackageName -> String) -> PackageName -> PackageName forall b c a. (b -> c) -> (a -> b) -> a -> c . PackageName -> String Cabal.unPackageName toCabal :: PackageName -> Cabal.PackageName toCabal :: PackageName -> PackageName toCabal (PackageName Text name) = String -> PackageName mkPackageName (Text -> String forall a. ToString a => a -> String toString Text name) depPackageName :: Dependency -> PackageName depPackageName :: Dependency -> PackageName depPackageName = PackageName -> PackageName fromCabal (PackageName -> PackageName) -> (Dependency -> PackageName) -> Dependency -> PackageName forall b c a. (b -> c) -> (a -> b) -> a -> c . Dependency -> PackageName depPkgName newtype LocalPackage = LocalPackage PackageName deriving stock (LocalPackage -> LocalPackage -> Bool (LocalPackage -> LocalPackage -> Bool) -> (LocalPackage -> LocalPackage -> Bool) -> Eq LocalPackage forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a $c== :: LocalPackage -> LocalPackage -> Bool == :: LocalPackage -> LocalPackage -> Bool $c/= :: LocalPackage -> LocalPackage -> Bool /= :: LocalPackage -> LocalPackage -> Bool Eq, Int -> LocalPackage -> ShowS [LocalPackage] -> ShowS LocalPackage -> String (Int -> LocalPackage -> ShowS) -> (LocalPackage -> String) -> ([LocalPackage] -> ShowS) -> Show LocalPackage forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a $cshowsPrec :: Int -> LocalPackage -> ShowS showsPrec :: Int -> LocalPackage -> ShowS $cshow :: LocalPackage -> String show :: LocalPackage -> String $cshowList :: [LocalPackage] -> ShowS showList :: [LocalPackage] -> ShowS Show, (forall x. LocalPackage -> Rep LocalPackage x) -> (forall x. Rep LocalPackage x -> LocalPackage) -> Generic LocalPackage forall x. Rep LocalPackage x -> LocalPackage forall x. LocalPackage -> Rep LocalPackage x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cfrom :: forall x. LocalPackage -> Rep LocalPackage x from :: forall x. LocalPackage -> Rep LocalPackage x $cto :: forall x. Rep LocalPackage x -> LocalPackage to :: forall x. Rep LocalPackage x -> LocalPackage Generic) deriving newtype (String -> LocalPackage (String -> LocalPackage) -> IsString LocalPackage forall a. (String -> a) -> IsString a $cfromString :: String -> LocalPackage fromString :: String -> LocalPackage IsString, Eq LocalPackage Eq LocalPackage => (LocalPackage -> LocalPackage -> Ordering) -> (LocalPackage -> LocalPackage -> Bool) -> (LocalPackage -> LocalPackage -> Bool) -> (LocalPackage -> LocalPackage -> Bool) -> (LocalPackage -> LocalPackage -> Bool) -> (LocalPackage -> LocalPackage -> LocalPackage) -> (LocalPackage -> LocalPackage -> LocalPackage) -> Ord LocalPackage LocalPackage -> LocalPackage -> Bool LocalPackage -> LocalPackage -> Ordering LocalPackage -> LocalPackage -> LocalPackage forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a $ccompare :: LocalPackage -> LocalPackage -> Ordering compare :: LocalPackage -> LocalPackage -> Ordering $c< :: LocalPackage -> LocalPackage -> Bool < :: LocalPackage -> LocalPackage -> Bool $c<= :: LocalPackage -> LocalPackage -> Bool <= :: LocalPackage -> LocalPackage -> Bool $c> :: LocalPackage -> LocalPackage -> Bool > :: LocalPackage -> LocalPackage -> Bool $c>= :: LocalPackage -> LocalPackage -> Bool >= :: LocalPackage -> LocalPackage -> Bool $cmax :: LocalPackage -> LocalPackage -> LocalPackage max :: LocalPackage -> LocalPackage -> LocalPackage $cmin :: LocalPackage -> LocalPackage -> LocalPackage min :: LocalPackage -> LocalPackage -> LocalPackage Ord, Maybe LocalPackage Value -> Parser [LocalPackage] Value -> Parser LocalPackage (Value -> Parser LocalPackage) -> (Value -> Parser [LocalPackage]) -> Maybe LocalPackage -> FromJSON LocalPackage forall a. (Value -> Parser a) -> (Value -> Parser [a]) -> Maybe a -> FromJSON a $cparseJSON :: Value -> Parser LocalPackage parseJSON :: Value -> Parser LocalPackage $cparseJSONList :: Value -> Parser [LocalPackage] parseJSONList :: Value -> Parser [LocalPackage] $comittedField :: Maybe LocalPackage omittedField :: Maybe LocalPackage FromJSON, FromJSONKeyFunction [LocalPackage] FromJSONKeyFunction LocalPackage FromJSONKeyFunction LocalPackage -> FromJSONKeyFunction [LocalPackage] -> FromJSONKey LocalPackage forall a. FromJSONKeyFunction a -> FromJSONKeyFunction [a] -> FromJSONKey a $cfromJSONKey :: FromJSONKeyFunction LocalPackage fromJSONKey :: FromJSONKeyFunction LocalPackage $cfromJSONKeyList :: FromJSONKeyFunction [LocalPackage] fromJSONKeyList :: FromJSONKeyFunction [LocalPackage] FromJSONKey, CabalSpecVersion -> LocalPackage -> Doc LocalPackage -> Doc (LocalPackage -> Doc) -> (CabalSpecVersion -> LocalPackage -> Doc) -> Pretty LocalPackage forall a. (a -> Doc) -> (CabalSpecVersion -> a -> Doc) -> Pretty a $cpretty :: LocalPackage -> Doc pretty :: LocalPackage -> Doc $cprettyVersioned :: CabalSpecVersion -> LocalPackage -> Doc prettyVersioned :: CabalSpecVersion -> LocalPackage -> Doc Pretty, LocalPackage -> Text (LocalPackage -> Text) -> EncodeNixKey LocalPackage forall a. (a -> Text) -> EncodeNixKey a $cencodeNixKey :: LocalPackage -> Text encodeNixKey :: LocalPackage -> Text EncodeNixKey) localPackageName :: LocalPackage -> PackageName localPackageName :: LocalPackage -> PackageName localPackageName = LocalPackage -> PackageName forall a b. Coercible a b => a -> b coerce localPackageNames :: [LocalPackage] -> [PackageName] localPackageNames :: [LocalPackage] -> [PackageName] localPackageNames = [LocalPackage] -> [PackageName] forall a b. Coercible a b => a -> b coerce sameLocalPackage :: LocalPackage -> PackageName -> Bool sameLocalPackage :: LocalPackage -> PackageName -> Bool sameLocalPackage (LocalPackage PackageName lp) PackageName p = PackageName lp PackageName -> PackageName -> Bool forall a. Eq a => a -> a -> Bool == PackageName p isLocalPackage :: Set LocalPackage -> PackageName -> Bool isLocalPackage :: Set LocalPackage -> PackageName -> Bool isLocalPackage Set LocalPackage lps PackageName p = LocalPackage -> Set LocalPackage -> Bool forall a. Ord a => a -> Set a -> Bool Set.member (PackageName -> LocalPackage LocalPackage PackageName p) Set LocalPackage lps toLocalPackage :: Set LocalPackage -> PackageName -> Maybe LocalPackage toLocalPackage :: Set LocalPackage -> PackageName -> Maybe LocalPackage toLocalPackage Set LocalPackage lps PackageName p | Set LocalPackage -> PackageName -> Bool isLocalPackage Set LocalPackage lps PackageName p = LocalPackage -> Maybe LocalPackage forall a. a -> Maybe a Just (PackageName -> LocalPackage LocalPackage PackageName p) | Bool otherwise = Maybe LocalPackage forall a. Maybe a Nothing