-- | -- Module: Staversion.Internal.Query -- Description: Query, Result and related symbols. -- Maintainer: Toshio Ito -- -- __This is an internal module. End-users should not use it.__ module Staversion.Internal.Query ( PackageName, Resolver, PackageSource(..), Query(..), ErrorMsg, Result(..), ResultVersions, resultVersionsFromList, resultVersionsToList, sourceDesc ) where import qualified Data.HashMap.Strict as HM import Data.Text (Text, pack) import Data.Version (Version) type PackageName = Text -- | Resolver name at stackage like "lts-4.1". type Resolver = String -- | Source of packages. data PackageSource = SourceStackage Resolver -- ^ stackage. deriving (Show,Eq,Ord) -- | Query for package version(s). data Query = QueryName PackageName deriving (Show,Eq,Ord) type ErrorMsg = String -- | Result for a query. data Result = Result { resultIn :: PackageSource, resultFor :: Query, resultVersions :: Either ErrorMsg ResultVersions } deriving (Show,Eq) -- | The obtained version map. newtype ResultVersions = ResultVersions (HM.HashMap PackageName (Maybe Version)) deriving (Show,Eq) resultVersionsFromList :: [(PackageName, Maybe Version)] -> ResultVersions resultVersionsFromList = ResultVersions . HM.fromList resultVersionsToList :: ResultVersions -> [(PackageName, Maybe Version)] resultVersionsToList (ResultVersions m) = HM.toList m -- | description of a 'PackageSource'. sourceDesc :: PackageSource -> Text sourceDesc (SourceStackage r) = pack r