packages feed

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

-------------------------------------------------------------------------------