From a6f85b9b8894a7817baad1a5e850366d02eb197a Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Wed, 13 Jan 2016 18:18:06 +0100 Subject: FFP 11.1 --- .../ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs | 65 ++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs (limited to 'ws2015/ffp/blaetter/11/FFP_U11-4_TemplateHaskell.hs') 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 @@ +-- Fortgeschrittene Funktionale Programmierung, +-- LMU, TCS, Wintersemester 2015/16 +-- Steffen Jost, Alexander Isenko +-- +-- Übungsblatt 11. 13.01.2016 +-- +-- Teilaufgabe +-- A11-4a TemplateHaskell +-- +-- Im Modul GameUnits sind einige +-- Kreaturen definiert, und eine Funktion, +-- um zwei gegeneinander Kämpfen zu lassen, +-- wie in Übungsblatt 7 bereits verwendet. +-- +-- Es ist nervig, jedes Mal die komplette Figur einzugeben, +-- weshalb wir Konstanten definieren möchten, etwa so: +{- +units = + [ unit{ name = "Scout", str= 5 } + , unit{ name = "Crow", str= 5, hit=1, flyer=True } + , unit{ name = "Orc", str=20, hit=1 } + ] + +scout = units !! 0 +crow = units !! 1 +orc = units !! 2 +-} + +-- Es ist jedoch schwierig, dies konsistent zu halten! +-- Schreiben Sie innerhalb des Moduls GameUnit eine +-- Funktion, welche die entsprechende Konstanten-Deklaration +-- für alle Einheiten der stockUnitList automatisch generiert, +-- so dass der folgende Code danach funktioniert! + +-- Hinweis: Dazu benötigen Sie vermutlich +-- aus Modul Language.Haskell.TH folgende Definitionen +-- ValD, VarP, NormalB, newName und QuasiQuoting +-- + +{-# LANGUAGE TemplateHaskell #-} + + +import GameUnits + + +$(stockUnitShortcuts) + + +main = do + dobattle orc elf + dobattle orc elf + dobattle elf dwarf + dobattle elf dwarf + dobattle elf dwarf + dobattle elf dwarf + + + +dobattle :: Unit -> Unit -> IO () +dobattle att def = do + putStrLn $ "Attacker: " ++ name att + putStrLn $ "Defender: " ++ name def + winner <- battle att def + putStrLn $ "Winner: " ++ show winner + putStrLn "---" \ No newline at end of file -- cgit v1.2.3