scion-browser-0.2.3: src/Scion/PersistentHoogle.hs
module Scion.PersistentHoogle
( query
, downloadData
, checkDatabase
, module Scion.PersistentHoogle.Types
) where
import Control.Monad
import Control.Monad.IO.Class (liftIO)
import Database.Persist.Sqlite
import Scion.PersistentBrowser ()
import Scion.PersistentHoogle.Types
import Scion.PersistentHoogle.Instances.Json ()
import Scion.PersistentHoogle.Parser
import Scion.PersistentHoogle.Util
import System.Exit (ExitCode(..))
import System.Process
import Text.Parsec.Prim (runP)
query :: Maybe String -> String -> SqlPersist IO [Result]
query p q = do mpath <- liftIO $ findHoogleBinPath p
case mpath of
Nothing -> return []
Just path -> do (exitCode, output, err) <- liftIO $ readProcessWithExitCode path [q] ""
case exitCode of
ExitSuccess -> do let search = runP hoogleElements () "hoogle-output" (output)
case search of
Right result -> do dbResult <- result
return dbResult
Left _ -> return []
_ -> do liftIO $ putStrLn err
return []
downloadData :: Maybe String -> IO Bool
downloadData p = do mpath <- findHoogleBinPath p
case mpath of
Nothing -> return False
Just path -> do putStrLn "Running hoogle data..."
(ec, _, err) <- readProcessWithExitCode path ["data"] ""
when (ec/= ExitSuccess) (putStrLn err)
return (ec == ExitSuccess)
checkDatabase :: Maybe String -> IO Bool
checkDatabase p = do mpath <- findHoogleBinPath p
case mpath of
Nothing -> return False
Just path -> do (exitCode, _, _) <- readProcessWithExitCode path ["fmap"] ""
return (exitCode == ExitSuccess)