{-# LANGUAGE TemplateHaskell, PackageImports #-}

module HsDev.Version (
	cabalVersion
	) where

import Data.Char
import Data.List
import Data.Maybe
import "template-haskell" Language.Haskell.TH

cabalVersion :: ExpQ
cabalVersion :: ExpQ
cabalVersion = do
	String
s <- IO String -> Q String
forall a. IO a -> Q a
runIO (String -> IO String
readFile String
"hsdev.cabal")
	let
		version :: Maybe String
version = [String] -> Maybe String
forall a. [a] -> Maybe a
listToMaybe ([String] -> Maybe String) -> [String] -> Maybe String
forall a b. (a -> b) -> a -> b
$ (String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
isSpace) ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ (String -> Maybe String) -> [String] -> [String]
forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe (String -> String -> Maybe String
forall a. Eq a => [a] -> [a] -> Maybe [a]
stripPrefix String
"version:") ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ String -> [String]
lines String
s
	ExpQ -> (String -> ExpQ) -> Maybe String -> ExpQ
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> ExpQ
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
"Can't detect version") (\String
v -> [e| v |]) Maybe String
version