[Haskell-cafe] cabal-install failure

Claus Reinke claus.reinke at talk21.com
Thu Jun 19 18:28:54 EDT 2008

> In the specific case of parsing --version strings, I'm not sure regexes
> are any easier. Using words and then selecting the Nth word seems to do
> pretty well.

for comparison, see the examples below:-) There's no reason
this can't be massaged further, but it already allows for IO if
necessary (I like that it is compact and self-documenting -the
comments have become part of the patterns, but if you don't 
want to match against the precise message format, you can use 
more of [^[:space:]]* - pity that \S* isn't posix..).


import Text.Regex
import System.Process(runInteractiveProcess)
import System.IO(hGetContents)

test = mapM_ ((print =<<) . getVersion) programs

getVersion (prg,flag,io,extract) = do
  (i,o,e,p) <- runInteractiveProcess prg [flag] Nothing Nothing
  version <- hGetContents ([o,e]!!(io-1)) >>= extract
  return (prg,version)

defaultMatch :: String -> String -> IO String
defaultMatch pattern = return . maybe "" head . (matchRegex (mkRegex pattern))

programs = [ghc,ghcPkg,happy,alex,haddock]

ghc = ("ghc","--numeric-version",1,
  defaultMatch "([^[:space:]]*)")
ghcPkg = ("ghc-pkg","--version",1,
  defaultMatch "GHC package manager version ([^[:space:]]*)")
happy = ("happy","--version",1,
  defaultMatch "Happy Version ([^[:space:]]*)")
alex = ("alex","--version",1,
  defaultMatch "Alex version ([.0-9]*)")
haddock = ("haddock","--version",1,
  defaultMatch "Haddock version ([.0-9]*)")

More information about the Haskell-Cafe mailing list