packages feed

ghc-dump-tree-0.2.0.0: src/Main.hs

{-# LANGUAGE CPP #-}
module Main (main) where

import Language.Haskell.GHC.DumpTree

import Prelude
import Options.Applicative



#if MIN_VERSION_base(4,8,0)
#else
import Data.Monoid (mconcat)
#endif

{-------------------------------------------------------------------------------
  Main application
-------------------------------------------------------------------------------}

main :: IO ()
main = do
    Options{..} <- execParser opts
    trees       <- treesForTargetsIO optionsTargets
    if optionsDumpJson
      then dumpJson trees
      else dumpText trees
  where
    opts = info (helper <*> parseOptions) $ mconcat [
        fullDesc
      , header "ghc-dump-tree - Dump GHC's ASTs"
      ]

{-------------------------------------------------------------------------------
  Command line arguments
-------------------------------------------------------------------------------}

data Options = Options {
    optionsDumpJson :: Bool
  , optionsTargets  :: [FilePath]
  }

parseOptions :: Parser Options
parseOptions = Options
  <$> (switch $ mconcat [
          long "json"
        , help "Output JSON"
        ])
  <*> some (argument str (metavar "TARGETS..."))