Skip to main content

Haskell

Beispiele

Im Beispiel-Repository befinden sich Beispielaufgaben.

Tests

Die Testauswertung findet mit einem eigenen kleinen Modul namens HaskellUnit statt, welches sich im Repository befindet. In den Testdateien muss zunächst das HaskellUnit-Modul importiert werden:

module Main where
import HaskellUnit

Im Modul HaskellUnit ist eine Funktion mit folgender Signatur definiert:

testcase :: (Eq a, Show a) => String -> String -> a -> a -> IO Bool

Die Parameter bezeichnen der Reihe nach:

  • den Namen des Tests
  • eine Nachricht falls der Test fehlschlägt
  • das erwartete Testergebnis
  • das tatsächliche Testergebnis

Mit dieser Funktion lässt sich eine Liste konstanter Testfälle definieren, z.B.:

test1 = testcase "factorial 1" "(factorial 5) falsch" 120 (factorial 5)

Dann gibt es die Funktion:

runTests :: [IO Bool] -> IO ()

Damit wird ermöglicht in der Funktion main die Liste der Testfälle auszuführen.

main = runTests [test1,test2,test3]

Organisation von öffentlichen und privaten Tests

In der meta.xml können Tests so organisiert werden:

meta.xml
<files>
<file public="true" type="test" path="MyTest.hs"></file>
<file public="true" type="test" path="TestsPublic.lhs"></file>
<file public="false" type="test" path="TestsHidden.hs"></file>
</files>

Wenn man in MyTest.hs die Tests aus TestsPublic.lhs und TestsHidden.hs importiert und in der Funktion main ausführt, kann man einen Teil der Tests öffentlich machen und einen Teil geheim lassen.

Konventionen

  • Erlaubte Dateiendungen für Haskell Quelldateien sind:
    • .hs für direkte haskell Quelltextdateien
    • .lhs für invers kommentierte literate Haskell Stil
  • Eine Quelldatei muss ein Haskell Modul enthalten.
  • Es darf nur eine Testdatei geben.
  • Die Testdatei muss als Modulnamen Main haben und eine Funktion main, die eine Liste von Testfällen ausführt. Man kann hier natürlich die Tests aus unterschiedlichen Modulen importieren, die dann wiederum öffentlich oder nicht öffentlich gemacht werden können.

Umgebungen

Es steht eine kleine Auswahl von Haskell-Bibliotheken in der Umgebung zur Verfügung. Diese sind derzeit:

  • gtk3
  • random
  • lens
  • parallel
  • extra
  • network
  • HCodecs
  • MissingH
  • arithmoi
  • connection
  • OpenGLRaw
  • OpenGL
  • gloss