Typung polymorpher Tests
Für polymorphe Funktionen kann es Testfälle geben, bei denen nicht klar ist, welche Eq-Instanz für checkExpect ausgewählt werden soll.
Beispiel:
-- > checkExpect [] (reverse [])
reverse :: [a] -> [a]
reverse [] = []
reverse (x:xs) = reverse xs ++ [x]
reverse
ist für polymorphe Listen definiert. Bei Verwendung von checkExpect
mit dem Konstruktor für die leere Liste ist nun unklar, welche Eq-Instanz verwendet werden soll.
Mit Hilfe der Typinferenz sollten solche polymorphen Ausdrücke erkannt werden.
Entweder gibt man in diesem Fall eine Meldung aus, dass der Nutzer den Listentyp durch eine Annotation im Testfall festlegen soll oder man generiert intern eine entsprechende Typannotation, z.B. [] :: [()].