module Hoogle.Search.Result where import General.Code import Data.TagStr import Hoogle.DataBase.All import Hoogle.Item.All import Data.Binary.Defer.Index data Result = Result {resultEntry :: Link Entry ,resultView :: [EntryView] ,resultScore :: [Score] } deriving Show -- TypeScore must be less than TextScore -- so that when name :: type is searched, type takes preference data Score = TypeScore TypeScore | TextScore TextScore deriving (Eq,Ord) instance Show Score where showList xs = showString $ concat $ intersperse " & " $ map show xs show (TypeScore x) = show x show (TextScore x) = show x -- return (module it is in, the text to go beside it, verbose scoring info) renderResult :: Result -> (Maybe [String], TagStr, String) renderResult r = (if entryType e == EntryModule then Nothing else liftM (moduleName . fromLink) $ entryModule e ,renderEntryText (resultView r) $ entryText e ,show $ resultScore r) where e = fromLink $ resultEntry r