module Main where

import Language.Haskell.Syntax
import Language.Haskell.Parser
import Language.Haskell.Pretty
import Data.Generics

pp :: ParseResult HsModule -> String
pp (ParseOk hsm) = prettyPrint hsm
pp _ = "parse failed"

repl :: ParseResult HsModule -> ParseResult HsModule
repl (ParseOk hsm) = ParseOk $ (everywhere (mkT conversion)) hsm
	where
		conversion :: HsName -> HsName
		conversion (HsIdent "pp") = HsIdent "pop"
		conversion (HsIdent "pop") = HsIdent "pp"
		conversion pop = pop
repl a = a

main :: IO ()
main 
  = do mod <- getContents
       putStr $ pp $ repl $ parseModule mod
 
