    {-# LANGUAGE CPP #-}
    {-# LANGUAGE DeriveGeneric #-}
    module GHC.Internal.ForeignSrcLang
      ( ForeignSrcLang(..)
      ) where

    #ifdef BOOTSTRAP_TH
    import Prelude -- See note [Why do we import Prelude here?]
    import GHC.Generics (Generic)
    #else
    import GHC.Internal.Base
    import GHC.Internal.Show
    import GHC.Internal.Generics
    #endif

    -- | Foreign formats supported by GHC via TH
    data ForeignSrcLang
      = LangC      -- ^ C
      | LangCxx    -- ^ C++
      | LangObjc   -- ^ Objective C
      | LangObjcxx -- ^ Objective C++
      | LangAsm    -- ^ Assembly language (.s)
      | LangJs     -- ^ JavaScript
      | RawObject  -- ^ Object (.o)
      deriving (ForeignSrcLang -> ForeignSrcLang -> Bool
    (ForeignSrcLang -> ForeignSrcLang -> Bool)
    -> (ForeignSrcLang -> ForeignSrcLang -> Bool) -> Eq ForeignSrcLang
    forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
    $c== :: ForeignSrcLang -> ForeignSrcLang -> Bool
    == :: ForeignSrcLang -> ForeignSrcLang -> Bool
    $c/= :: ForeignSrcLang -> ForeignSrcLang -> Bool
    /= :: ForeignSrcLang -> ForeignSrcLang -> Bool
    Eq, Int -> ForeignSrcLang -> ShowS
    [ForeignSrcLang] -> ShowS
    ForeignSrcLang -> String
    (Int -> ForeignSrcLang -> ShowS)
    -> (ForeignSrcLang -> String)
    -> ([ForeignSrcLang] -> ShowS)
    -> Show ForeignSrcLang
    forall a.
    (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
    $cshowsPrec :: Int -> ForeignSrcLang -> ShowS
    showsPrec :: Int -> ForeignSrcLang -> ShowS
    $cshow :: ForeignSrcLang -> String
    show :: ForeignSrcLang -> String
    $cshowList :: [ForeignSrcLang] -> ShowS
    showList :: [ForeignSrcLang] -> ShowS
    Show, (forall x. ForeignSrcLang -> Rep ForeignSrcLang x)
    -> (forall x. Rep ForeignSrcLang x -> ForeignSrcLang)
    -> Generic ForeignSrcLang
    forall x. Rep ForeignSrcLang x -> ForeignSrcLang
    forall x. ForeignSrcLang -> Rep ForeignSrcLang x
    forall a.
    (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
    $cfrom :: forall x. ForeignSrcLang -> Rep ForeignSrcLang x
    from :: forall x. ForeignSrcLang -> Rep ForeignSrcLang x
    $cto :: forall x. Rep ForeignSrcLang x -> ForeignSrcLang
    to :: forall x. Rep ForeignSrcLang x -> ForeignSrcLang
    Generic)