summaryrefslogtreecommitdiff
path: root/ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs
diff options
context:
space:
mode:
Diffstat (limited to 'ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs')
-rw-r--r--ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs65
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{-
18units =
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
24scout = units !! 0
25crow = units !! 1
26orc = 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
43import GameUnits
44
45
46$(stockUnitShortcuts)
47
48
49main = 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
59dobattle :: Unit -> Unit -> IO ()
60dobattle 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