module Types where import ClassyPrelude.Yesod import Data.BlobStore (ToPath (..)) import Text.Blaze (ToMarkup) newtype PackageName = PackageName { unPackageName :: Text } deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup) newtype Version = Version { unVersion :: Text } deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup) newtype PackageSetIdent = PackageSetIdent { unPackageSetIdent :: Text } deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup) data StoreKey = HackageCabal !PackageName !Version | HackageSdist !PackageName !Version | CabalIndex !PackageSetIdent | CustomSdist !PackageSetIdent !PackageName !Version instance ToPath StoreKey where toPath (HackageCabal name version) = ["hackage", toPathPiece name, toPathPiece version ++ ".cabal"] toPath (HackageSdist name version) = ["hackage", toPathPiece name, toPathPiece version ++ ".tar.gz"] toPath (CabalIndex ident) = ["cabal-index", toPathPiece ident ++ ".tar.gz"] toPath (CustomSdist ident name version) = [ "custom-tarball" , toPathPiece ident , toPathPiece name , toPathPiece version ++ ".tar.gz" ] newtype HackageRoot = HackageRoot { unHackageRoot :: Text } deriving (Show, Read, Typeable, Eq, Ord, Hashable, PathPiece, ToMarkup) class HasHackageRoot a where getHackageRoot :: a -> HackageRoot instance HasHackageRoot HackageRoot where getHackageRoot = id