module Distribution.Types.ExecutableScope (
ExecutableScope(..),
) where
import Prelude ()
import Distribution.Compat.Prelude
import Distribution.Text
import qualified Distribution.Compat.ReadP as Parse
import Text.PrettyPrint (text)
data ExecutableScope = ExecutableScopeUnknown
| ExecutablePublic
| ExecutablePrivate
deriving (Generic, Show, Read, Eq, Typeable, Data)
instance Text ExecutableScope where
disp ExecutablePublic = text "public"
disp ExecutablePrivate = text "private"
disp ExecutableScopeUnknown = text "unknown"
parse = Parse.choice
[ Parse.string "public" >> return ExecutablePublic
, Parse.string "private" >> return ExecutablePrivate
]
instance Binary ExecutableScope
instance Monoid ExecutableScope where
mempty = ExecutableScopeUnknown
mappend = (<>)
instance Semigroup ExecutableScope where
ExecutableScopeUnknown <> x = x
x <> ExecutableScopeUnknown = x
x <> y | x == y = x
| otherwise = error "Ambiguous executable scope"