4 import Control.Monad.State
6 data BuildInfo = BuildInfo {
7 biThingVersionMap :: ThingVersionMap,
10 -- Mapping from thing (e.g. "Cabal") to version (e.g. "1.10.0.0")
11 type ThingVersionMap = [(String, String)]
12 -- The list of ways in the order the build system uses them, e.g.
13 -- ["v", "p", "dyn"] => we have ".depend-v-p-dyn.haskell" files
16 addThingVersion :: ThingVersionMap -> String -> String -> Maybe ThingVersionMap
17 addThingVersion mapping thing version
18 = case lookup thing mapping of
20 if version == version'
24 Just ((thing, version) : mapping)
26 getThingVersionMap :: State BuildInfo ThingVersionMap
27 getThingVersionMap = do st <- get
28 return $ biThingVersionMap st
30 getWays :: State BuildInfo Ways
31 getWays = do st <- get
34 putThingVersionMap :: ThingVersionMap -> State BuildInfo ()
35 putThingVersionMap tm = do st <- get
36 put $ st { biThingVersionMap = tm }
38 putWays :: Ways -> State BuildInfo ()
39 putWays ws = do st <- get
40 put $ st { biWays = ws }