@@ -5,6 +5,7 @@ import Control.Exception
5
5
import qualified Data.ByteString.Char8 as S8
6
6
import qualified Data.ByteString.Lazy.Char8 as L8
7
7
8
+ import Prelude
8
9
import qualified Data.Text as T
9
10
import Data.List (isPrefixOf , isSuffixOf )
10
11
import qualified Data.List as List
@@ -21,7 +22,6 @@ import Hails.Version
21
22
import Network.Wai.Handler.Warp
22
23
import Network.Wai.Middleware.RequestLogger
23
24
24
- import System.Posix.Env (setEnv )
25
25
import System.Environment
26
26
import System.Console.GetOpt hiding (Option )
27
27
import qualified System.Console.GetOpt as GetOpt
@@ -77,7 +77,7 @@ main = do
77
77
cleanOpts opts'
78
78
maybe (return () ) (optsToFile opts) $ optOutFile opts
79
79
putStrLn $ " Working environment:\n\n " ++ optsToEnvStr opts
80
- forM_ (optsToEnv opts) $ \ (k,v) -> setEnv k v True
80
+ forM_ (optsToEnv opts) $ \ (k,v) -> setEnv k v
81
81
let port = fromJust $ optPort opts
82
82
hmac_key = L8. pack . fromJust $ optHmacKey opts
83
83
persona = personaAuth hmac_key $ T. pack . fromJust . optPersonaAud $ opts
@@ -107,20 +107,24 @@ loadApp :: Bool -- -XSafe ?
107
107
-> IO (DC Application )
108
108
loadApp safe mpkgDb appName = do
109
109
case mpkgDb of
110
- Just pkgDb -> setEnv " GHC_PACKAGE_PATH" pkgDb True
110
+ Just pkgDb -> setEnv " GHC_PACKAGE_PATH" pkgDb
111
111
Nothing -> return ()
112
112
eapp <- runInterpreter $ do
113
+ loadModules [appName]
113
114
when safe $
114
115
set [languageExtensions := [asExtension " Safe" ]]
115
- loadModules [appName]
116
- setImports [" Prelude" , " LIO" , " LIO.DCLabel" , " Hails.HttpServer" , appName ]
116
+ setTopLevelModules [appName]
117
+ setImports [" Prelude" , " LIO" , " LIO.DCLabel" , " Hails.HttpServer" ]
117
118
entryFunType <- typeOf " server"
118
119
if entryFunType == " DC Application" then
119
120
interpret " server" (undefined :: DC Application )
120
121
else
121
122
interpret " return server" (undefined :: DC Application )
122
123
case eapp of
123
- Left err -> throwIO err
124
+ Left err -> case err of
125
+ WontCompile es -> do putStrLn (unlines $ map errMsg es)
126
+ throwIO (userError " Compilation error" )
127
+ _ -> throwIO err
124
128
Right app -> return app
125
129
126
130
--
@@ -397,7 +401,7 @@ envFromFile file = do
397
401
let (key',val') = S8. span (/= ' =' ) line
398
402
val = safeTail val'
399
403
in case S8. words key' of
400
- [key] -> setEnv (S8. unpack key) (S8. unpack val) True
404
+ [key] -> setEnv (S8. unpack key) (S8. unpack val)
401
405
_ -> do hPutStrLn stderr $ " Invalid environment line: " ++
402
406
show (S8. unpack line)
403
407
exitFailure
0 commit comments