module Importify.Cabal.Extension
( buildInfoExtensions
, withHarmlessExtensions
) where
import Universum
import qualified Distribution.ModuleName as Cabal
import Distribution.PackageDescription (BuildInfo (..))
import qualified Language.Haskell.Extension as Cabal (Extension (..))
import Language.Haskell.Exts.Extension (Extension (..), KnownExtension (..))
buildInfoExtensions :: BuildInfo -> [Extension]
buildInfoExtensions BuildInfo{..} = mapMaybe cabalExtToHseExt
$ defaultExtensions ++ otherExtensions
cabalExtToHseExt :: Cabal.Extension -> Maybe Extension
cabalExtToHseExt = readMaybe . show
withHarmlessExtensions :: [Extension] -> [Extension]
withHarmlessExtensions = ordNub
. (++ map EnableExtension [ MultiParamTypeClasses
, FlexibleContexts
, ConstraintKinds
, ExplicitNamespaces
])