Challenger

Dieses Modul muss von jeder Datei eingebunden werden. Hier steht die Definition der Klasse Problem mit den benötigten Bedingungen. Eine Besonderheit die hier erwähnt werden muß, ist die ``functional dependency'' von dem Typ der Instanz auf den Typ des Beweises. Bei der Instanzierung der Klasse Problem für ein Problemtyp ist deshalb für den Beweis zwingend ein eigener Datentyp notwendig. Doc ist dabei ein formatierter Text, der eine Beschreibung über die Korrektur liefert. In den Funktionen getInstanz und getBeweis ist der vierte Parameter ein Dateiname (ohne Endung), in dem die Funktionen ihre formatierte Ausgabe abspeichern. Der Rückgabewert ist der vollständige Dateiname, der Dateityp (Endung der Datei) und der Fehlercode des Systemaufrufs. Nach dem Typ der Datei wird entschieden, ob ein Link angelegt wird oder der Inhalt der Datei direkt in die HTML Datei eingebettet wird. Hier der Quelltext:
class (Show p, ToDoc i, Show i, Read i, Iso i, ToDoc b, Show b, Read b)
    => Problem  p i b | b -> i where
       validiere :: p -> i -> b -> (Bool, Doc) 
       verifiziere :: p -> i -> b -> (Bool, Doc) 
       getInstanz :: p -> i -> b -> String -> IO(String, String, ExitCode)
       getBeweis  :: p -> i -> b -> String -> IO(String, String, ExitCode)
data Einsendung p i b
    = Aufgabe { problem::p, instanz::i, beweis::b}
    | Loesung { problem::p, ident :: Ident , beweis::b}
data Ident = Ident {aufgabe :: Int } deriving (Show, Read)


Johannes Waldmann 2009-11-17