summaryrefslogtreecommitdiff
path: root/ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs
diff options
context:
space:
mode:
authorGregor Kleen <gkleen@yggdrasil.li>2016-01-13 18:18:06 +0100
committerGregor Kleen <gkleen@yggdrasil.li>2016-01-13 18:18:06 +0100
commita6f85b9b8894a7817baad1a5e850366d02eb197a (patch)
treef69bcd4f2e72cb85825459a8df0b4e84faef8bf7 /ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs
parente621ada27e4eb7b4495416a59741893a6003a20f (diff)
downloaduni-a6f85b9b8894a7817baad1a5e850366d02eb197a.tar
uni-a6f85b9b8894a7817baad1a5e850366d02eb197a.tar.gz
uni-a6f85b9b8894a7817baad1a5e850366d02eb197a.tar.bz2
uni-a6f85b9b8894a7817baad1a5e850366d02eb197a.tar.xz
uni-a6f85b9b8894a7817baad1a5e850366d02eb197a.zip
FFP 11.1
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