module Hoogle.Query.Type where
import Data.Maybe
import Data.Char
import Data.Generics.UniplateOn
import General.Code
import Hoogle.TypeSig.All
usefulQuery query = not (null (names query)) || isJust (typeSig query)
blankQuery = Query [] [] Nothing []
data Query = Query {
scope :: [Scope],
names :: [String],
typeSig :: Maybe TypeSig,
flags :: [Flag]
}
deriving Show
instance Eq Query where
(Query a1 b1 c1 d1) == (Query a2 b2 c2 d2) =
and [a1 `setEq` a2, b1 `setEq` b2, c1 == c2, d1 `setEq` d2]
data Scope = PlusPackage String
| MinusPackage String
| PlusModule [String]
| MinusModule [String]
deriving (Eq, Show, Read)
isPlusModule (PlusModule _) = True; isPlusModule _ = False
isMinusModule (MinusModule _) = True; isMinusModule _ = False
data Flag = Flag String String
deriving (Eq, Show, Read)
transformQueryType :: (Type -> Type) -> Query -> Query
transformQueryType f q = q{typeSig = maybe Nothing (Just . transformOn onTypeSig f) (typeSig q)}
universeQueryType :: Query -> [Type]
universeQueryType = maybe [] (universeOn onTypeSig) . typeSig