diff options
Diffstat (limited to 'ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs')
-rw-r--r-- | ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs b/ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs new file mode 100644 index 0000000..05668a7 --- /dev/null +++ b/ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs | |||
@@ -0,0 +1,65 @@ | |||
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-4a TemplateHaskell | ||
9 | -- | ||
10 | -- Im Modul GameUnits sind einige | ||
11 | -- Kreaturen definiert, und eine Funktion, | ||
12 | -- um zwei gegeneinander Kämpfen zu lassen, | ||
13 | -- wie in Übungsblatt 7 bereits verwendet. | ||
14 | -- | ||
15 | -- Es ist nervig, jedes Mal die komplette Figur einzugeben, | ||
16 | -- weshalb wir Konstanten definieren möchten, etwa so: | ||
17 | {- | ||
18 | units = | ||
19 | [ unit{ name = "Scout", str= 5 } | ||
20 | , unit{ name = "Crow", str= 5, hit=1, flyer=True } | ||
21 | , unit{ name = "Orc", str=20, hit=1 } | ||
22 | ] | ||
23 | |||
24 | scout = units !! 0 | ||
25 | crow = units !! 1 | ||
26 | orc = units !! 2 | ||
27 | -} | ||
28 | |||
29 | -- Es ist jedoch schwierig, dies konsistent zu halten! | ||
30 | -- Schreiben Sie innerhalb des Moduls GameUnit eine | ||
31 | -- Funktion, welche die entsprechende Konstanten-Deklaration | ||
32 | -- für alle Einheiten der stockUnitList automatisch generiert, | ||
33 | -- so dass der folgende Code danach funktioniert! | ||
34 | |||
35 | -- Hinweis: Dazu benötigen Sie vermutlich | ||
36 | -- aus Modul Language.Haskell.TH folgende Definitionen | ||
37 | -- ValD, VarP, NormalB, newName und QuasiQuoting | ||
38 | -- | ||
39 | |||
40 | {-# LANGUAGE TemplateHaskell #-} | ||
41 | |||
42 | |||
43 | import GameUnits | ||
44 | |||
45 | |||
46 | $(stockUnitShortcuts) | ||
47 | |||
48 | |||
49 | main = do | ||
50 | dobattle orc elf | ||
51 | dobattle orc elf | ||
52 | dobattle elf dwarf | ||
53 | dobattle elf dwarf | ||
54 | dobattle elf dwarf | ||
55 | dobattle elf dwarf | ||
56 | |||
57 | |||
58 | |||
59 | dobattle :: Unit -> Unit -> IO () | ||
60 | dobattle att def = do | ||
61 | putStrLn $ "Attacker: " ++ name att | ||
62 | putStrLn $ "Defender: " ++ name def | ||
63 | winner <- battle att def | ||
64 | putStrLn $ "Winner: " ++ show winner | ||
65 | putStrLn "---" \ No newline at end of file | ||