Haskell timeout HTTP GET and JSON decode
Haskell
import Control.Exception (SomeException, try)
import Data.Aeson (Value, eitherDecode')
import Network.HTTP.Simple (getResponseBody, httpLbs, parseRequest)
import System.Timeout (timeout)
fetchJson :: Int -> String -> IO (Either String Value)
fetchJson micros url = do
outcome <- try $ timeout micros $ do
request <- parseRequest url
getResponseBody <$> httpLbs request
pure $ case outcome of
Left err -> Left (show (err :: SomeException))
Right Nothing -> Left "request timed out"
Right (Just body) -> eitherDecode' body