module Haste.Version (
BootVer (..),
hasteVersion, intVersion, ghcVersion, bootVersion,
showBootVersion, parseBootVersion,
showVersion
) where
import Data.Version
import Config (cProjectVersion)
import Text.ParserCombinators.ReadP
import Data.Maybe (listToMaybe)
hasteVersion :: Version
hasteVersion = Version [0,5,2] []
intVersion :: Int
intVersion = foldl (\a x -> a*100+x) 0 $ take 3 ver
where Version ver _ = hasteVersion
ghcVersion :: Version
ghcVersion =
fst $ head $ filter (\(_,s) -> null s) parses
where
parses = readP_to_S parseVersion cProjectVersion
bootVersion :: BootVer
bootVersion = BootVer hasteVersion ghcVersion
data BootVer = BootVer {
bootHasteVersion :: !Version,
bootGhcVersion :: !Version
} deriving (Show, Read)
showBootVersion :: BootVer -> String
showBootVersion (BootVer ver ghcver) =
"haste-" ++ showVersion ver ++ "-ghc-" ++ showVersion ghcver
parseBootVersion :: String -> Maybe BootVer
parseBootVersion =
fmap fst . listToMaybe . filter (\(_,s) -> null s) . parse
where
parse = readP_to_S $ do
_ <- string "haste-"
hastever <- parseVersion
_ <- string "-ghc-"
ghcver <- parseVersion
return $ BootVer hastever ghcver