on 2edbe13 help sign in
elk/worker/src/Main.hs
69 lines 1.6 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Main
4 ( main
5 )
6 where
9import Control.Monad (msum)
10import qualified Data.ByteString as BS
11import Snap.Core
12import Snap.Http.Server
14import qualified Artifacts
15import qualified Cors
16import qualified Endpoint.Compile as Compile
17import qualified Endpoint.Repl as Repl
21-- RUN THE DEV SERVER
24main :: IO ()
25main =
26 do rArtifacts <- Artifacts.loadRepl
27 cArtifacts <- Artifacts.loadCompile
28 errorJS <- Compile.loadErrorJS
29 let depsInfo = Artifacts.toDepsInfo cArtifacts
31 httpServe config $ msum $
32 [ ifTop $ status
33 , path "repl" $ Repl.endpoint rArtifacts
34 , path "compile" $ Compile.endpoint cArtifacts
35 , path "compile/errors.js" $ serveJavaScript errorJS
36 , path "compile/deps-info.json" $ serveDepsInfo depsInfo
37 , notFound
38 ]
41config :: Config Snap a
42config =
43 setPort 8000 $ setAccessLog ConfigNoLog $ setErrorLog ConfigNoLog $ defaultConfig
46status :: Snap ()
47status =
48 do modifyResponse $ setContentType "text/plain"
49 writeBuilder "Status: OK"
52notFound :: Snap ()
53notFound =
54 do modifyResponse $ setResponseStatus 404 "Not Found"
55 modifyResponse $ setContentType "text/html; charset=utf-8"
56 writeBuilder "Not Found"
59serveJavaScript :: BS.ByteString -> Snap ()
60serveJavaScript javascript =
61 do modifyResponse $ setContentType "application/javascript"
62 writeBS javascript
65serveDepsInfo :: BS.ByteString -> Snap ()
66serveDepsInfo json =
67 Cors.allow GET ["https://elm-lang.org"] $
68 do modifyResponse $ setContentType "application/json"
69 writeBS json