@@ -18,8 +18,10 @@ import Control.Concurrent.Chan (Chan, newChan, readChan, writeChan)
1818import Control.Concurrent.MVar (MVar, newEmptyMVar, putMVar, readMVar)
1919import Control.Exception (Exception, SomeException, catch)
2020import Control.Monad (forever, join, replicateM_, void)
21+import qualified Data.ByteString.Char8 as BS
2122import qualified Network.HTTP as Http (urlEncodeVars)
2223import qualified Network.HTTP.Client as Http
24+import qualified Network.HTTP.Types.Header as Http (hAcceptEncoding, hUserAgent)
2325
2426import qualified Elm.Compiler as Compiler
2527import qualified Elm.Package as Pkg
@@ -170,7 +172,7 @@ fetchSafe url manager handler =
170172fetchUnsafe :: String -> Http.Manager -> Handler a -> IO (Either Exit.Exit a)
171173fetchUnsafe url manager handler =
172174 do request <- Http.parseUrlThrow url
173− result <- handler request manager
175+ result <- handler (addHeaders request) manager
174176 case result of
175177 Right value ->
176178 return (Right value)
@@ -182,3 +184,19 @@ fetchUnsafe url manager handler =
182184handleAnyError :: (Exception e) => String -> e -> IO (Either Exit.Exit a)
183185handleAnyError url exception =
184186 return $ Left $ Exit.BadHttp url $ E.Unknown $ show exception
187+
188+
189+addHeaders :: Http.Request -> Http.Request
190+addHeaders request =
191+ request
192+ { Http.requestHeaders =
193+ [ (Http.hUserAgent, userAgent)
194+ , (Http.hAcceptEncoding, "gzip")
195+ ]
196+ }
197+
198+
199+{-# NOINLINE userAgent #-}
200+userAgent :: BS.ByteString
201+userAgent =
202+ BS.pack ("elm/" ++ Pkg.versionToString Compiler.version)