Angenommen, ich habe ein Haskell-Modul mit dem Namen Foo
, definiert in src/Foo.hs
. Nehmen Sie auch an, dass Foo
einen Typ Bar
exportiert.Vermeiden der Build-Abhängigkeit von QuickCheck beim Deklarieren einer beliebigen Instanz
Jetzt möchte ich Unit-Tests für Bar
(für die gesamte Foo
Modul, tatsächlich) schreiben, so werfe ich ein paar Quick Check Eigenschaften in test/FooTest.hs
; aber hey, jetzt muss ich eine Arbitrary
Instanz für Bar
definieren.
Und das ist der Haken: in -Wall -Werror
Modus erfordert ghc
Instanz Deklarationen an einer von zwei Stellen angezeigt: in der gleichen Datei, wo der Typ definiert ist, oder wo die Klasse definiert ist. Aber ich möchte nicht mein Foo
-Modul mit einer Build-Abhängigkeit von QuickCheck überladen, und ich kann natürlich keine Instanz von Bar
zu QuickCheck hinzufügen.
Also wie mache ich meinen Datentyp eine Instanz von Arbitrary
, nur für Unit-Tests, ohne eine Abhängigkeit von QuickCheck für Benutzer meines Moduls und ohne -Wall -Werror
aus dem Fenster zu werfen?
Argh, wird der Text nie enden ?! ;) –
@ Arek'Fu Das Boilerplate kann reduziert werden, indem sichere Zwänge nach Bedarf ausgenutzt werden. – chi
@chi, es ist immer noch eine Menge Lärm, und Sie müssen auf unsichere Zwänge für GHC 7.6 zurückgreifen, wenn Sie das unterstützen. Ich sehe nicht, wie es sich für eine Testsuite lohnt. – dfeuer