{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TupleSections #-}
module Ormolu.Printer.Meat.Pragma
( p_pragmas,
)
where
import qualified Data.Set as S
import qualified Data.Text as T
import Ormolu.Parser.Pragma (Pragma (..))
import Ormolu.Printer.Combinators
data PragmaTy = Language | OptionsGHC | OptionsHaddock
deriving (Eq, Ord)
p_pragmas :: [Pragma] -> R ()
p_pragmas ps =
let prepare = concatMap $ \case
PragmaLanguage xs -> (Language,) <$> xs
PragmaOptionsGHC x -> [(OptionsGHC, x)]
PragmaOptionsHaddock x -> [(OptionsHaddock, x)]
in mapM_ (uncurry p_pragma) (S.toAscList . S.fromList . prepare $ ps)
p_pragma :: PragmaTy -> String -> R ()
p_pragma ty c = do
txt "{-# "
txt $ case ty of
Language -> "LANGUAGE"
OptionsGHC -> "OPTIONS_GHC"
OptionsHaddock -> "OPTIONS_HADDOCK"
space
txt (T.pack c)
txt " #-}"
newline