3
3
module Haskell.Ide.Engine.Plugin.Hoogle where
4
4
5
5
import Control.Monad.IO.Class
6
+ import Control.Monad (join )
7
+ import Control.Exception
6
8
import Data.Aeson
7
9
import Data.Bifunctor
8
10
import Data.Maybe
@@ -42,7 +44,11 @@ hoogleDescriptor plId = PluginDescriptor
42
44
43
45
-- ---------------------------------------------------------------------
44
46
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 )
46
52
47
53
newtype HoogleDb = HoogleDb (Maybe FilePath )
48
54
@@ -53,6 +59,8 @@ hoogleErrorToIdeError NoResults =
53
59
IdeError PluginError " No results found" Null
54
60
hoogleErrorToIdeError NoDb =
55
61
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
56
64
57
65
instance ExtensionClass HoogleDb where
58
66
initialValue = HoogleDb Nothing
@@ -216,8 +224,8 @@ lookupCmd' n term = do
216
224
runHoogleQuery :: Maybe FilePath -> T. Text -> ([Target ] -> Either HoogleError a ) -> IO (Either HoogleError a )
217
225
runHoogleQuery Nothing _ _ = return $ Left NoDb
218
226
runHoogleQuery (Just db) quer f = do
219
- res <- searchHoogle db quer
220
- return ( f res)
227
+ res <- try ( searchHoogle db quer) :: IO ( Either ErrorCall [ Target ])
228
+ return . join $ bimap ( DbFail . T. pack . show ) f res
221
229
222
230
223
231
-- | Run a query for Hoogle on the given Hoogle database.
0 commit comments