@@ -9,8 +9,10 @@ import Happstack.Server
99import Happstack.Server.Compression
1010import System.Directory
1111import System.Environment
12+import System.Exit
1213import System.FilePath
1314import System.Process
15+import GHC.IO.Handle
1416import qualified Language.Elm as Elm
1517import Paths_elm_server
1618
@@ -36,10 +38,18 @@ serveElm :: FilePath -> ServerPartT IO Response
3638serveElm fp = do
3739 guard (takeExtension fp == ".elm")
3840 let file = tail fp
39− liftIO $ rawSystem "elm" [ "--make" ,"--runtime=" ++ runtime
40− , "--cache-dir=elm-server-cache", file ]
41+ args = [ "--make" ,"--runtime=" ++ runtime, "--cache-dir=elm-server-cache", file ]
42+ (_, stdout, _, handle) <- liftIO $ createProcess $ (proc "elm" args) { std_out = CreatePipe }
43+ exitCode <- liftIO $ waitForProcess handle
4144 liftIO $ removeDirectoryRecursive "elm-server-cache"
42− serveFile (asContentType "text/html") ("build" </> replaceExtension file "html")
45+ case (exitCode, stdout) of
46+ (ExitFailure _, Just out) ->
47+ do str <- liftIO $ hGetContents out
48+ badRequest $ toResponse str
49+ (ExitFailure _, Nothing) ->
50+ badRequest $ toResponse "See command line for error message."
51+ (ExitSuccess, _) ->
52+ serveFile (asContentType "text/html") ("build" </> replaceExtension file "html")
4353
4454serveLib :: FilePath -> [Char] -> ServerPartT IO Response
4555serveLib libLoc fp = do