on master help sign in
* added the elmFile QuasiQuoter for embedding .elm files
bdb3a63Vincent Ambo
Examples/elm-yesod/Main.hs+5−14
@@ -10,36 +10,27 @@ import Text.Julius
10
10
11data ElmTest = ElmTest
11data ElmTest = ElmTest
12
12
13−-- our Elm code
13+-- embedding an external elm file (note: no spaces!)
14−mousePage = [elm|
14+mousePage = [elmFile|elm_source/mouse.elm|]
15−niceBlue = rgb 0 (1/3) (2/3)
16−clearGreen = rgba (1/9) (8/9) (3/9) (1/2)
17−
18−scene (x,y) (w,h) =
19− collage w h [ filled niceBlue . rotate ((x+y)/1000) $ ngon 4 100 (200,200)
20− , filled clearGreen $ ngon 5 30 (x,y)
21− ]
22−
23−main = lift2 scene Mouse.position Window.dimensions
24−|]
25
15
16+-- embedding elm code in our Haskell file
26rootPage = [elm|
17rootPage = [elm|
27main = plainText "Welcome!"
18main = plainText "Welcome!"
28|]
19|]
29
20
30-- our Yesod App
21-- our Yesod App
31−
32mkYesod "ElmTest" [parseRoutes|
22mkYesod "ElmTest" [parseRoutes|
33/ RootR GET
23/ RootR GET
34/mouse MouseR GET
24/mouse MouseR GET
35|]
25|]
36
26
27+-- generateWidget is called with the result of an Elm QuasiQuoter (which is just a
28+-- string containing some Elm code, with proper newline escaping)
37getMouseR :: Handler RepHtml
29getMouseR :: Handler RepHtml
38getMouseR = defaultLayout $ do
30getMouseR = defaultLayout $ do
39 setTitle "Mouse position demo"
31 setTitle "Mouse position demo"
40 generateWidget mousePage
32 generateWidget mousePage
41
33
42−
43getRootR :: Handler RepHtml
34getRootR :: Handler RepHtml
44getRootR = defaultLayout $ do
35getRootR = defaultLayout $ do
45 setTitle "Welcome!"
36 setTitle "Welcome!"
Examples/elm-yesod/elm_source/mouse.elmnew file+9
@@ -0,0 +1,9 @@
1+niceBlue = rgb 0 (1/3) (2/3)
2+clearGreen = rgba (1/9) (8/9) (3/9) (1/2)
3+
4+scene (x,y) (w,h) =
5+ collage w h [ filled niceBlue . rotate ((x+y)/1000) $ ngon 4 100 (200,200)
6+ , filled clearGreen $ ngon 5 30 (x,y)
7+ ]
8+
9+main = lift2 scene Mouse.position Window.dimensions
elm/src/Language/Elm.hs+5−1
@@ -5,7 +5,8 @@ module Language.Elm (
5 module Language.Elm.CompileToJS,
5 module Language.Elm.CompileToJS,
6 module Language.Elm.ExtractNoscript,
6 module Language.Elm.ExtractNoscript,
7 generateHtml,
7 generateHtml,
8− elm) where
8+ elm,
9+ elmFile) where
9
10
10import Language.Elm.CompileToJS
11import Language.Elm.CompileToJS
11import Language.Elm.ExtractNoscript
12import Language.Elm.ExtractNoscript
@@ -16,3 +17,6 @@ import Language.Haskell.TH.Quote
16
17
17elm :: QuasiQuoter
18elm :: QuasiQuoter
18elm = QuasiQuoter {quoteExp = \s -> [|s|] }
19elm = QuasiQuoter {quoteExp = \s -> [|s|] }
20+
21+elmFile :: QuasiQuoter
22+elmFile = quoteFile elm