on 4bb23bc help sign in
elk/server/Server.hs
72 lines 2.1 kB history raw
2module Main where
4import Control.Monad (msum,guard)
5import Control.Monad.Trans (MonadIO(liftIO))
6import Data.List (isPrefixOf, isSuffixOf)
7import Data.Version (showVersion)
8import Happstack.Server
9import Happstack.Server.Compression
10import System.Environment
11import System.FilePath
12import qualified Language.Elm as Elm
13import Paths_elm_server
15runtime = "/elm-" ++ showVersion version ++ ".js"
17serve :: String -> IO ()
18serve libLoc = do
19 putStrLn ("Elm Server " ++ showVersion version ++
20 ": running at <http://localhost:8000>")
21 putStrLn "Just refresh a page to recompile it!"
22 simpleHTTP nullConf $ do
23 _ <- compressedResponseFilter
24 msum [ uriRest serveElm
25 , uriRest (serveLib libLoc)
26 , serveDirectory EnableBrowsing [] "."
27 ]
29pageTitle :: String -> String
30pageTitle = dropExtension . takeBaseName
32serveElm fp = do
33 guard (takeExtension fp == ".elm")
34 content <- liftIO (readFile (tail fp))
35 ok . toResponse $ Elm.toHtml runtime (pageTitle fp) content
37serveLib libLoc fp = do
38 guard (fp == runtime)
39 serveFile (asContentType "application/javascript") libLoc
41main :: IO ()
42main = getArgs >>= parse
44parse :: [String] -> IO ()
45parse ("--help":_) = putStrLn usage
46parse ("--version":_) = putStrLn ("The Elm Server " ++ showVersion version)
47parse [] = serve =<< Elm.runtime
48parse [arg]
49 | "--runtime-location=" `isPrefixOf` arg =
50 serve . tail $ dropWhile (/='=') arg
51 | otherwise = putStrLn usageMini
52parse _ = putStrLn usageMini
54usageMini :: String
55usageMini =
56 "Usage: elm-server [OPTIONS]\n\
57 \Try `elm-server --help' for more information."
59usage :: String
60usage =
61 "Usage: elm-server [OPTIONS]\n\
62 \Compiles and serves .elm files from the current directory.\n\
63 \Example: elm-server\n\
64 \\n\
65 \Resource Locations:\n\
66 \ --runtime-location set the location of the Elm runtime\n\
67 \\n\
68 \Compiler Information:\n\
69 \ --version print the version information and exit\n\
70 \ --help display this help and exit\n\
71 \\n\
72 \Elm home page: <http://elm-lang.org>"