HaRe-0.6: StrategyLib-4.0-beta/examples/haskell/HsIOWrap.hs
module HsIOWrap where
-------------------------------------------------------------------------------
--- This module provides wrapper functions for analyses and transformations
--- that take care of file IO, parsing and pretty-printing.
-------------------------------------------------------------------------------
import System
import Language.Haskell.Syntax(HsModule,SrcLoc(..))
import Language.Haskell.Parser
import Language.Haskell.Pretty(prettyPrint)
import IO
--- Transformation wrapper ----------------------------------------------------
hsIOwrap transform
= do [fin,fout] <- getArgs
hPutStrLn stderr ("Reading file: "++fin)
sin <- readFile fin
let pin = parseWrap sin
let Just pout = transform pin
let sout = (prettyPrint pout)++"\n"
hPutStrLn stderr ("Writing file: "++fout)
writeFile fout sout
------------------------------------------------------------------------
parseWrap :: String -> HsModule
parseWrap x = forceResult (parseModule x)
parseWrap' :: String -> Either HsModule String
parseWrap' x
= case (parseModule x) of
(ParseOk x) -> Left x
(ParseFailed _ msg) -> Right msg
forceResult :: ParseResult a -> a
forceResult (ParseOk x) = x
forceResult (ParseFailed _ msg) = error msg
-------------------------------------------------------------------------------