ghc-exactprint-0.2: tests/examples/Utils2.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE StandaloneDeriving #-}
module Utils2 where
import Control.Applicative (Applicative(..))
import Control.Monad (when, liftM, ap)
import Control.Exception
import Data.Data
import Data.List
import Data.Maybe
import Data.Monoid
-- import Language.Haskell.GHC.ExactPrint.Utils
import Language.Haskell.GHC.ExactPrint.Types
import qualified Bag as GHC
import qualified BasicTypes as GHC
import qualified BooleanFormula as GHC
import qualified Class as GHC
import qualified CoAxiom as GHC
import qualified DynFlags as GHC
import qualified FastString as GHC
import qualified ForeignCall as GHC
import qualified GHC as GHC
import qualified GHC.Paths as GHC
import qualified Lexer as GHC
import qualified Name as GHC
import qualified NameSet as GHC
import qualified Outputable as GHC
import qualified RdrName as GHC
import qualified SrcLoc as GHC
import qualified StringBuffer as GHC
import qualified UniqSet as GHC
import qualified Unique as GHC
import qualified Var as GHC
import qualified Data.Map as Map
-- ---------------------------------------------------------------------
instance AnnotateP GHC.RdrName where
annotateP l n = do
case rdrName2String n of
"[]" -> do
addDeltaAnnotation GHC.AnnOpenS -- '[' nonBUG
addDeltaAnnotation GHC.AnnCloseS -- ']' BUG
"()" -> do
addDeltaAnnotation GHC.AnnOpenP -- '('
addDeltaAnnotation GHC.AnnCloseP -- ')'
"(##)" -> do
addDeltaAnnotation GHC.AnnOpen -- '(#'
addDeltaAnnotation GHC.AnnClose -- '#)'
"[::]" -> do
addDeltaAnnotation GHC.AnnOpen -- '[:'
addDeltaAnnotation GHC.AnnClose -- ':]'
_ -> do
addDeltaAnnotation GHC.AnnType
addDeltaAnnotation GHC.AnnOpenP -- '('
addDeltaAnnotationLs GHC.AnnBackquote 0
addDeltaAnnotations GHC.AnnCommaTuple -- For '(,,,)'
cnt <- countAnnsAP GHC.AnnVal
cntT <- countAnnsAP GHC.AnnCommaTuple
cntR <- countAnnsAP GHC.AnnRarrow
case cnt of
0 -> if cntT >0 || cntR >0 then return () else addDeltaAnnotationExt l GHC.AnnVal
1 -> addDeltaAnnotation GHC.AnnVal
x -> error $ "annotateP.RdrName: too many AnnVal :" ++ showGhc (l,x)
addDeltaAnnotation GHC.AnnTildehsh
addDeltaAnnotation GHC.AnnTilde
addDeltaAnnotation GHC.AnnRarrow
addDeltaAnnotationLs GHC.AnnBackquote 1
addDeltaAnnotation GHC.AnnCloseP -- ')'
-- temporary, for test
class (Typeable ast) => AnnotateP ast where
annotateP :: GHC.SrcSpan -> ast -> IO ()
addDeltaAnnotation = undefined
addDeltaAnnotations = undefined
addDeltaAnnotationLs = undefined
addDeltaAnnotationExt = undefined
countAnnsAP = undefined
showGhc = undefined
rdrName2String = undefined