on 4dd5937 help sign in
64 lines 1.7 kB history raw
1{-# LANGUAGE QuasiQuotes, TemplateHaskell #-}
3import Control.Monad (msum)
4import Happstack.Server
5import Language.Elm
6import Language.Elm.Quasi
8elmLoc :: String
9elmLoc = "http://f.cl.ly/items/2e3Z3r3v29263U393c3x/elm-min.js"
11elmResponse :: ElmSource a
12 => String -- ^ Page title
13 -> a -- ^ elm source
14 -> Response
15elmResponse title = toResponse . toHtml elmLoc title
17-- embedding variables (in this case URLs)
18rootHandler :: ServerPart Response
19rootHandler = ok $ elmResponse "Welcome!" $ elmIndex
20 where
21 mouse = "/mouse"
22 clock = "/clock"
23 shapes = "/shapes"
24 elmIndex = $(elmFile "elm_source/index.elm")
26-- loading elm source from file
28mouseHandler :: ServerPart Response
29mouseHandler = ok $ elmResponse "Mouse position demo"
30 $(elmFile "elm_source/mouse.elm")
32clockHandler :: ServerPart Response
33clockHandler = ok $ elmResponse "A clock" $(elmFile "elm_source/clock.elm")
35-- embedding elm code inside Haskell using the QuasiQuoter:
36shapesPage = [elm|
37square = rect 200 200 (150,150)
38circle = oval 140 140 (150,150)
39pentagon = ngon 5 60 (150,150)
41main = collage 300 300
42 [ outlined black square
43 , filled green pentagon
44 , customOutline [8,4] blue circle
45 ]
46|]
48shapesHandler :: ServerPart Response
49shapesHandler = ok $ elmResponse "Simple shapes" $ shapesPage
51-- routing
52elmExample :: ServerPart Response
53elmExample =
54 msum [ nullDir >> rootHandler
55 , dir "mouse" $ nullDir >>
56 mouseHandler
57 , dir "clock" $ nullDir >>
58 clockHandler
59 , dir "shapes" $ nullDir >>
60 shapesHandler
61 ]
63main :: IO ()
64main = simpleHTTP nullConf {port = 3000} elmExample