module Distribution.Query.Types
( Query(..) ) where
import Data.Data
import Data.DeriveTH
import Data.List.Utils (join)
import Distribution.Compiler
import Distribution.License
import Distribution.ModuleName hiding (main)
import Distribution.Package
import Distribution.PackageDescription
import Distribution.Version
import Language.Haskell.Extension
import Distribution.Query.TH
data Query where
(:&) :: Query -> Query -> Query
(:|) :: Query -> Query -> Query
Not :: Query -> Query
Id :: Data a => (a -> Bool) -> Query
$(deriveMany makeTypeable
[''PackageDescription
,''Executable
,''Library
,''BuildType
,''VersionRange
,''Dependency
,''SourceRepo
,''CompilerFlavor
,''License
,''PackageIdentifier
,''BuildInfo
,''ModuleName
,''PackageName
,''RepoType
,''RepoKind
,''Extension])
$(deriveMany makeData
[''PackageDescription
,''Executable
,''Library
,''BuildType
,''VersionRange
,''Dependency
,''SourceRepo
,''CompilerFlavor
,''License
,''PackageIdentifier
,''BuildInfo
,''PackageName
,''RepoType
,''RepoKind
,''Extension
,''Version])
instance Data ModuleName where
gfoldl _ z = z . simple . join "." . components
gunfold _ z _ = z $ simple ""
toConstr _ = con_C
dataTypeOf _ = ty_T
con_C :: Constr
con_C = mkConstr ty_T "ModuleName" [] Prefix
ty_T :: DataType
ty_T = mkDataType "Distribution.ModuleName.ModuleName" [con_C]