src/Importify/Cabal/Extension.hs
-- | Functions that work with 'Extension's in .cabal file and in
-- separate.
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 (..))
-- | Get list of all extensions from 'BuildInfo' and convert them into
-- 'HSE.Extension'.
buildInfoExtensions :: BuildInfo -> [Extension]
buildInfoExtensions BuildInfo{..} = mapMaybe cabalExtToHseExt
$ defaultExtensions ++ otherExtensions
cabalExtToHseExt :: Cabal.Extension -> Maybe Extension
cabalExtToHseExt = readMaybe . show
{-
showExt :: Cabal.Extension -> String
showExt (Cabal.EnableExtension ext) = show ext
showExt (Cabal.DisableExtension ext) = "No" ++ show ext
showExt (Cabal.UnknownExtension name) = name
-}
-- | This function add list of harmless extensions wich helps to avoid
-- some parsing errors but doesn't affect already correct parsing
-- results.
withHarmlessExtensions :: [Extension] -> [Extension]
withHarmlessExtensions = ordNub
. (++ map EnableExtension [ MultiParamTypeClasses
, FlexibleContexts
, ConstraintKinds
, ExplicitNamespaces
])