1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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