33module Haskell.Ide.Engine.Plugin.Hoogle where
44
55import Control.Monad.IO.Class
6+ import Control.Monad (join )
7+ import Control.Exception
68import Data.Aeson
79import Data.Bifunctor
810import Data.Maybe
@@ -42,7 +44,11 @@ hoogleDescriptor plId = PluginDescriptor
4244
4345-- ---------------------------------------------------------------------
4446
45- data HoogleError = NoDb | NoResults deriving (Eq ,Ord ,Show )
47+ data HoogleError
48+ = NoDb
49+ | DbFail T. Text
50+ | NoResults
51+ deriving (Eq ,Ord ,Show )
4652
4753newtype HoogleDb = HoogleDb (Maybe FilePath )
4854
@@ -53,6 +59,8 @@ hoogleErrorToIdeError NoResults =
5359 IdeError PluginError " No results found" Null
5460hoogleErrorToIdeError NoDb =
5561 IdeError PluginError " Hoogle database not found. Run hoogle generate to generate" Null
62+ hoogleErrorToIdeError (DbFail msg) =
63+ IdeError PluginError (" Hoogle failed with following error: " <> msg) Null
5664
5765instance ExtensionClass HoogleDb where
5866 initialValue = HoogleDb Nothing
@@ -215,8 +223,8 @@ lookupCmd' n term = do
215223runHoogleQuery :: Maybe FilePath -> T. Text -> ([Target ] -> Either HoogleError a ) -> IO (Either HoogleError a )
216224runHoogleQuery Nothing _ _ = return $ Left NoDb
217225runHoogleQuery (Just db) quer f = do
218- res <- searchHoogle db quer
219- return ( f res)
226+ res <- try ( searchHoogle db quer) :: IO ( Either ErrorCall [ Target ])
227+ return . join $ bimap ( DbFail . T. pack . show ) f res
220228
221229
222230-- | Run a query for Hoogle on the given Hoogle database.
0 commit comments