-- 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 "---"