packages feed

hoogle-3.1: src/Hoogle/Match.hs

{-
    This file is part of Hoogle, (c) Neil Mitchell 2004-2005
    http://www.cs.york.ac.uk/~ndm/hoogle/
    
    This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike License.
    To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/2.0/
    or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
-}

{- |
    The main driver module, all the associated interfaces call into this
-}

module Hoogle.Match(matchUnordered, matchOrdered, matchRange) where

import Hoogle.Result
import Hoogle.Database
import Hoogle.Search

import Hoogle.MatchName
import Hoogle.MatchType

import Data.List


---------------------------------------------------------------------
-- DRIVER



-- | The main drivers for hoogle
matchUnordered
    :: FilePath -- ^ The full path to the hoogle file, if null then a default is used
    -> SearchMode -- ^ The string to search for, unparsed
    -> IO [Result] -- ^ A list of Results, from best to worst
matchUnordered path find =
    do 
        let file = if null path then "hoogle.txt" else path
        database <- loadDatabase file
        return $ case find of
            SearchName x -> lookupName (names database) x
            SearchType x -> lookupType (classes database) (types database) x


-- | 
matchOrdered :: FilePath -> SearchMode -> IO [Result]
matchOrdered path find =
    do res <- matchUnordered path find
       return $ sort res



matchRange :: FilePath -> SearchMode -> Int -> Int -> IO [Result]
matchRange path find 0 count =
    do res <- matchOrdered path find
       return $ take count res


matchRange path find from count = 
    do res <- matchRange path find 0 (from+count)
       return $ drop from res