cabal-gild-1.0.2.2: source/library/CabalGild/Type/Extension.hs
module CabalGild.Type.Extension where
import qualified Data.Char as Char
import qualified Data.Ord as Ord
import qualified Distribution.Parsec as Parsec
import qualified Distribution.Pretty as Pretty
import qualified Language.Haskell.Extension as Extension
-- | This type exists to provide a different 'Ord' instance for
-- 'Extension.Extension'. The instance provided by @Cabal-syntax@ sorts things
-- in a surprising order. This one sorts things alphabetically with "enable"
-- extensions before "disable" ones.
newtype Extension = Extension
{ unwrap :: Extension.Extension
}
deriving (Eq, Show)
instance Ord Extension where
compare = Ord.comparing $ \e -> (isDisable $ unwrap e, Pretty.prettyShow e)
instance Parsec.Parsec Extension where
parsec = Extension <$> Parsec.parsec
instance Pretty.Pretty Extension where
pretty = Pretty.pretty . unwrap
-- | Returns 'True' if the given extension is either a
-- 'Extension.DisableExtension' or it's an 'Extension.UnknownExtension' that
-- starts with @"No"@ followed by an uppercase letter.
isDisable :: Extension.Extension -> Bool
isDisable e = case e of
Extension.EnableExtension _ -> False
Extension.DisableExtension _ -> True
Extension.UnknownExtension s -> case s of
'N' : 'o' : c : _ -> Char.isUpper c
_ -> False