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
type Resolver = String
data PackageSource = SourceStackage Resolver
| SourceHackage
deriving (Show,Eq,Ord)
data Query = QueryName PackageName
deriving (Show,Eq,Ord)
type ErrorMsg = String
data Result = Result { resultIn :: PackageSource,
resultFor :: Query,
resultVersions :: Either ErrorMsg ResultVersions
} deriving (Show,Eq)
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
sourceDesc :: PackageSource -> Text
sourceDesc (SourceStackage r) = pack r
sourceDesc SourceHackage = "latest in hackage"