module Extension(
defaultExtensions,
configExtensions,
extensionImpliedEnabledBy,
extensionImplies
) where
import Data.List.Extra
import qualified Data.Map as Map
import GHC.LanguageExtensions.Type
import qualified Language.Haskell.GhclibParserEx.GHC.Driver.Session as GhclibParserEx
badExtensions =
reallyBadExtensions ++
[ Arrows
, UnboxedTuples, UnboxedSums
, QuasiQuotes
, RecursiveDo
]
reallyBadExtensions =
[ TransformListComp
, StaticPointers
, AlternativeLayoutRule
, NegativeLiterals
]
defaultExtensions :: [Extension]
defaultExtensions = enumerate \\ badExtensions
configExtensions :: [Extension]
configExtensions = enumerate \\ reallyBadExtensions
extensionImplies :: Extension -> ([Extension], [Extension])
extensionImplies = \x ->Map.findWithDefault ([], []) x mp
where mp = Map.fromList extensionImplications
extensionImpliedEnabledBy :: Extension -> [Extension]
extensionImpliedEnabledBy = \x -> Map.findWithDefault [] x mp
where
mp = Map.fromListWith (++) [(b, [a]) | (a, (bs, _)) <- extensionImplications, b <- bs]
_extensionImpliedDisabledBy :: Extension -> [Extension]
_extensionImpliedDisabledBy = \x -> Map.findWithDefault [] x mp
where
mp = Map.fromListWith (++) [(b, [a]) | (a, (_, bs)) <- extensionImplications, b <- bs]
extensionImplications :: [(Extension, ([Extension], [Extension]))]
extensionImplications = GhclibParserEx.extensionImplications