module Hoogle.DataBase.Type(module Hoogle.DataBase.Type, module X) where
import Hoogle.DataBase.Items as X
import Hoogle.DataBase.Suggest as X
import Hoogle.DataBase.Aliases as X
import Hoogle.DataBase.Instances as X
import Hoogle.DataBase.SubstrSearch as X
import Hoogle.DataBase.TypeSearch.All as X
import Hoogle.Store.All
import Hoogle.Type.All
import General.Base
data DataBase = DataBase
{items :: Items
,nameSearch :: SubstrSearch (Once Entry)
,typeSearch :: TypeSearch
,suggest :: Suggest
,aliases :: Aliases
,instances :: Instances
}
deriving Typeable
instance NFData DataBase where
rnf (DataBase a b c d e f) = rnf (a,b,c,d,e,f)
instance Store DataBase where
put (DataBase a b c d e f) = put6 a b c d e f
get = get6 DataBase
instance Show DataBase where
show = concatMap snd . showDataBaseParts
showDataBaseParts :: DataBase -> [(String,String)]
showDataBaseParts (DataBase a b c d e f) =
let name * val = (name, "= " ++ name ++ " =\n\n" ++ show val ++ "\n") in
["Items" * a,"NameSearch" * b, "TypeSearch" * c
,"Suggest" * d, "Aliases" * e, "Instances" * f]
showDataBase :: String -> DataBase -> String
showDataBase "" d = show d
showDataBase x d | null r = "Error: Unknown database part, " ++ x
| length r > 1 = "Error: Ambiguous database part, " ++ x
| otherwise = head r
where r = [b | (a,b) <- showDataBaseParts d, lower x `isPrefixOf` lower a]