module PyF.Internal.Extensions
  ( thExtToMetaExt,
  )
where

import qualified Language.Haskell.Exts.Extension as Exts
import qualified Language.Haskell.TH as TH

-- | Associate a template haskell extension to an haskell-src-ext extension
thExtToMetaExt :: TH.Extension -> Maybe Exts.Extension
thExtToMetaExt :: Extension -> Maybe Extension
thExtToMetaExt Extension
e =
  KnownExtension -> Extension
Exts.EnableExtension (KnownExtension -> Extension)
-> Maybe KnownExtension -> Maybe Extension
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> case Extension
e of
    -- For some reason, the casing is different between TH and haskell-src-exts
    Extension
TH.Cpp -> KnownExtension -> Maybe KnownExtension
forall a. a -> Maybe a
Just KnownExtension
Exts.CPP
    -- Hope for the best, if haskell-src-ext knows the extension or not
    Extension
_ -> case String -> Extension
Exts.parseExtension (Extension -> String
forall a. Show a => a -> String
show Extension
e) of
      Exts.EnableExtension KnownExtension
ext -> KnownExtension -> Maybe KnownExtension
forall a. a -> Maybe a
Just KnownExtension
ext
      Exts.DisableExtension KnownExtension
ext -> KnownExtension -> Maybe KnownExtension
forall a. a -> Maybe a
Just KnownExtension
ext
      Exts.UnknownExtension String
_ -> Maybe KnownExtension
forall a. Maybe a
Nothing