diff options
Diffstat (limited to 'ws2015/ffp/blaetter/11/FFP_U11-2_Yesod.hs')
| -rw-r--r-- | ws2015/ffp/blaetter/11/FFP_U11-2_Yesod.hs | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/ws2015/ffp/blaetter/11/FFP_U11-2_Yesod.hs b/ws2015/ffp/blaetter/11/FFP_U11-2_Yesod.hs new file mode 100644 index 0000000..83f7945 --- /dev/null +++ b/ws2015/ffp/blaetter/11/FFP_U11-2_Yesod.hs | |||
| @@ -0,0 +1,85 @@ | |||
| 1 | -- Fortgeschrittene Funktionale Programmierung, | ||
| 2 | -- LMU, TCS, Wintersemester 2015/16 | ||
| 3 | -- Steffen Jost, Alexander Isenko | ||
| 4 | -- | ||
| 5 | -- Übungsblatt 11. 13.01.2016 | ||
| 6 | -- | ||
| 7 | -- Teilaufgabe | ||
| 8 | -- A11-2 Yesod Grundlagen (Routing & Handling) | ||
| 9 | -- | ||
| 10 | |||
| 11 | {-# LANGUAGE ViewPatterns #-} | ||
| 12 | {-# LANGUAGE MultiParamTypeClasses #-} | ||
| 13 | {-# LANGUAGE OverloadedStrings #-} | ||
| 14 | {-# LANGUAGE TypeFamilies #-} | ||
| 15 | {-# LANGUAGE TemplateHaskell, QuasiQuotes #-} | ||
| 16 | |||
| 17 | module Main where | ||
| 18 | |||
| 19 | import Yesod | ||
| 20 | import qualified Data.Text as T | ||
| 21 | |||
| 22 | {- | ||
| 23 | Ausgehend von dem minimalen Yesod Beispielen auf Folie 09-12, | ||
| 24 | erstellen Sie eine kleine Webseite mit Yesod, welche Integer-Zahlen | ||
| 25 | addieren und multiplizieren kann. | ||
| 26 | Zur Übung der Grundlagen des Routings möchten wir dies | ||
| 27 | unsinnigerweise über die URL-Pfade der Webseite machen: | ||
| 28 | |||
| 29 | * http://localhost:3000/24/plus/373/ist | ||
| 30 | zeigt eine Seite an, welche die Zahl 397 anzeigt. | ||
| 31 | |||
| 32 | * http://localhost:3000/5/mal/-13/ist | ||
| 33 | zeigt eine Seite an, welche die Zahl -65 anzeigt. | ||
| 34 | |||
| 35 | * http://localhost:3000/5/plus/-1foo3/ist | ||
| 36 | zeigt eine Hilfseite an, welche darauf hinweist, dass nur ganze Zahlen erlaubt sind. | ||
| 37 | |||
| 38 | * jeder unsinniger Pfad wie etwa | ||
| 39 | http://localhost:3000/5/foo/-13/ist | ||
| 40 | zeigt eine Hilfseite an, die sagt welche Rechenoperationen erlaubt sind. | ||
| 41 | |||
| 42 | |||
| 43 | Hinweis: Yesod verwendet Data.Text, ein effizienter Ersatz für den ineffizienten Typ String. | ||
| 44 | Modul Data.Text stellt Methoden zur Bearbeitung von Werte dieses Typs bereit, hier eine Auswahl davon: | ||
| 45 | pack :: String -> Text | ||
| 46 | unpack :: Text -> String | ||
| 47 | append :: Text -> Text -> Text | ||
| 48 | strip :: Text -> Text | ||
| 49 | null :: Text -> Bool | ||
| 50 | length :: Text -> Int | ||
| 51 | -} | ||
| 52 | |||
| 53 | |||
| 54 | {- LÖSUNGSVORSCHLAG -} | ||
| 55 | |||
| 56 | main :: IO () | ||
| 57 | main = warp 3000 CalcApp | ||
| 58 | |||
| 59 | data CalcApp = CalcApp | ||
| 60 | |||
| 61 | instance Yesod CalcApp | ||
| 62 | |||
| 63 | mkYesod "CalcApp" [parseRoutes| | ||
| 64 | / HomeR GET | ||
| 65 | |] | ||
| 66 | |||
| 67 | |||
| 68 | getHomeR :: Handler Html | ||
| 69 | getHomeR = defaultLayout $ do | ||
| 70 | setTitle "Hello!" | ||
| 71 | let x = 2 | ||
| 72 | let y = 3 | ||
| 73 | toWidget [whamlet| | ||
| 74 | <h2>Hello World! | ||
| 75 | <p> Some text that is <i>displayed</i> here. | ||
| 76 | <p> We have #{show x}+#{show y}=#{show $ x + y}! | ||
| 77 | |] | ||
| 78 | |||
| 79 | |||
| 80 | |||
| 81 | |||
| 82 | |||
| 83 | -- | ||
| 84 | -- Weiter geht es mit der Datei FFP_U11-3_Yesod.hs | ||
| 85 | -- | ||
