module Hoogle.Query.Type where
import General.Base
import Hoogle.Type.All
data Query = Query
{names :: [String]
,typeSig :: Maybe TypeSig
,scope :: [Scope]
}
deriving (Data,Typeable,Show,Eq)
instance Monoid Query where
mempty = Query [] Nothing []
mappend (Query x1 x2 x3) (Query y1 y2 y3) =
Query (x1++y1) (x2 `mplus` y2) (x3++y3)
data Scope = PlusPackage String
| MinusPackage String
| PlusModule [String]
| MinusModule [String]
deriving (Eq, Show, Read, Data, Typeable)
queryDatabases :: Query -> [String]
queryDatabases x = if null ps then ["default"] else ps
where ps = [p | PlusPackage p <- scope x]
queryPackages :: Query -> [(Bool, String)]
queryPackages = concatMap f . scope
where f (MinusPackage x) = [(False,x)]
f (PlusPackage x) = [(True ,x)]
f _ = []
querySetPackage :: Maybe Bool -> String -> Query -> Query
querySetPackage b x q = q{scope= filter f (scope q) ++ [if b then PlusPackage x else MinusPackage x | Just b <- [b]]}
where f (MinusPackage y) = x /= y
f (PlusPackage y) = x /= y
f _ = True