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