content: module GhcMod.Exe.Check (
      checkSyntax
    , check
    , expandTemplate
    , expand
    ) where
  
  import Control.Applicative
  import Prelude
  import GhcMod.DynFlags
  import qualified GhcMod.Gap as Gap
  import GhcMod.Logger
  import GhcMod.Monad
  
  ----------------------------------------------------------------
  
  -- | Checking syntax of a target file using GHC.
  --   Warnings and errors are returned.
  checkSyntax :: IOish m
              => [FilePath]  -- ^ The target files.
              -> GhcModT m String
  checkSyntax []    = return ""
  checkSyntax files = either id id <$> check files
  
  ----------------------------------------------------------------
  
  -- | Checking syntax of a target file using GHC.
  --   Warnings and errors are returned.
  check :: IOish m
        => [FilePath]  -- ^ The target files.
        -> GhcModT m (Either String String)
  check files =
      runGmlTWith
        (map Left files)
        return
        ((fmap fst <$>) . withLogger Gap.setNoMaxRelevantBindings)
        (return ())
  
  ----------------------------------------------------------------
  
  -- | Expanding Haskell Template.
  expandTemplate :: IOish m
                 => [FilePath]  -- ^ The target files.
                 -> GhcModT m String
  expandTemplate []    = return ""
  expandTemplate files = either id id <$> expand files
  
  ----------------------------------------------------------------
  
  -- | Expanding Haskell Template.
  expand :: IOish m => [FilePath] -> GhcModT m (Either String String)
  expand files =
      runGmlTWith
        (map Left files)
        return
        ((fmap fst <$>) . withLogger (Gap.setDumpSplices . setNoWarningFlags))
        (return ())
  