module PureScript.Ide.Pursuit where
import Control.Lens
import Data.Aeson.Lens
import Data.Either
import Data.Monoid
import Data.Text (Text)
import qualified Data.Text as T
import Network.Wreq
import PureScript.Ide.Types
import PureScript.Ide.Externs (typeParse)
queryUrl :: Text
queryUrl = "http://pursuit.purescript.org/search?q="
jsonOpts :: Options
jsonOpts = defaults & header "Accept" .~ ["application/json"]
myZip :: [a] -> [(b, c)] -> [(a, b, c)]
myZip = zipWith (\a (b, c) -> (a, b, c))
searchPursuit :: Text -> IO [Completion]
searchPursuit query = do
r <- getWith jsonOpts (T.unpack $ queryUrl <> query)
let texts = r ^.. responseBody . values . key "text" . _String
let moduleNames = r ^..
responseBody .
values .
key "info" .
key "module" .
_String
return . fmap Completion . myZip moduleNames . rights $ typeParse <$> texts