module Distribution.Types.Mixin (
    Mixin(..),
) where
import Distribution.Compat.Prelude
import Prelude ()
import Text.PrettyPrint ((<+>))
import Distribution.Parsec.Class
import Distribution.Pretty
import Distribution.Text
import Distribution.Types.IncludeRenaming
import Distribution.Types.PackageName
import qualified Distribution.Compat.CharParsing as P
import qualified Distribution.Compat.ReadP  as Parse
data Mixin = Mixin { mixinPackageName :: PackageName
                   , mixinIncludeRenaming :: IncludeRenaming }
    deriving (Show, Read, Eq, Ord, Typeable, Data, Generic)
instance Binary Mixin
instance NFData Mixin where rnf = genericRnf
instance Pretty Mixin where
    pretty (Mixin pkg_name incl) = pretty pkg_name <+> pretty incl
instance Parsec Mixin where
    parsec = do
        mod_name <- parsec
        P.spaces
        incl <- parsec
        return (Mixin mod_name incl)
instance Text Mixin where
    parse = do
        pkg_name <- parse
        Parse.skipSpaces
        incl <- parse
        return (Mixin pkg_name incl)