stack-3.7.1: src/Stack/Types/GhcOptionKey.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-|
Module : Stack.Types.GhcOptionKey
License : BSD-3-Clause
-}
module Stack.Types.GhcOptionKey
( GhcOptionKey (..)
) where
import Data.Aeson.Types ( FromJSONKey (..), FromJSONKeyFunction (..) )
import qualified Data.Text as T
import Stack.Prelude
-- | Type representing scopes of the application by Stack of GHC options.
data GhcOptionKey
= GOKOldEverything
-- ^ All packages, project packages or otherwise (specified with legacy
-- syntax).
| GOKEverything
-- ^ All packages, project packages or otherwise.
| GOKLocals
-- ^ All project packages, targets or otherwise.
| GOKTargets
-- ^ All project packages that are targets.
| GOKPackage !PackageName
-- ^ A named package.
deriving (Eq, Ord)
instance FromJSONKey GhcOptionKey where
fromJSONKey = FromJSONKeyTextParser $ \t ->
case t of
"*" -> pure GOKOldEverything
"$everything" -> pure GOKEverything
"$locals" -> pure GOKLocals
"$targets" -> pure GOKTargets
_ ->
case parsePackageName $ T.unpack t of
Nothing -> fail $ "Invalid package name: " ++ show t
Just x -> pure $ GOKPackage x
fromJSONKeyList =
FromJSONKeyTextParser $ \_ -> fail "GhcOptionKey.fromJSONKeyList"