{-# LANGUAGE GeneralizedNewtypeDeriving #-} -- | -- Module: Staversion.Internal.BuildPlan.BuildPlanMap -- Description: BuildPlanMap type and related symbols. -- Maintainer: Toshio Ito -- -- __This is an internal module. End-users should not use it.__ -- -- @since 0.2.4.0 module Staversion.Internal.BuildPlan.BuildPlanMap ( BuildPlanMap, fromMap, fromList, toList, HasVersions(..) ) where import Control.Applicative (empty, (<$>), (<*>)) import qualified Data.HashMap.Strict as HM import Data.Monoid (Monoid, (<>), mconcat) import Data.Semigroup (Semigroup) import Staversion.Internal.Query ( PackageName ) import Staversion.Internal.Version (Version) -- | A data structure that keeps a map between package names and their -- versions. newtype BuildPlanMap = BuildPlanMap (HM.HashMap PackageName Version) deriving (Semigroup,Monoid,Show,Eq) fromMap :: HM.HashMap PackageName Version -> BuildPlanMap fromMap = BuildPlanMap fromList :: [(PackageName, Version)] -> BuildPlanMap fromList = BuildPlanMap . HM.fromList toList :: BuildPlanMap -> [(PackageName, Version)] toList (BuildPlanMap m) = HM.toList m -- | Types that have mapping between 'PackageName' and 'Version'. class HasVersions t where packageVersion :: t -> PackageName -> Maybe Version instance HasVersions BuildPlanMap where packageVersion (BuildPlanMap bp_map) name = HM.lookup name bp_map