Generisch abgeleitet Arbitrary für massive algebraische Datentypen?

8

Ich habe ein Protokoll, das ich so eingegeben habe:

%Vor%

Zusätzlich habe ich Serialisierungs- / Deserialisierungscode für jedes Paket implementiert. Natürlich möchte ich dieses Protokoll in Quickcheck testen und sicherstellen, dass das Serialisieren und Deserialisieren jedes Pakets für eine beliebige Kombination von Eingaben mir genau das zurückgibt, was ich eingegeben habe. Also setze ich diese Pakete für die Klasse Arbitrary um so:

%Vor%

Ich nehme an, dass ich Arbitrary für alle relevanten Datenkonstruktorargumente definiert habe, für die Arbitrary nicht standardmäßig definiert ist. Dieser Code muss von mir für das Paket von Hand geschrieben werden Felder, die mit aussagekräftigen Daten gefüllt werden sollen. Aber das ist es.

Aber wie Sie sehen können, wiederhole ich mich viel für etwas, das nur Arbeit ist. Und das ist eine kleine Auswahl von dem, mit dem ich eigentlich zu tun habe. Idealerweise möchte ich das einfach machen können:

%Vor%

kann ich mit FromJSON und ToJSON machen, aber das funktioniert nicht. Gibt es eine Methode, die das tut?

    
carpemb 15.06.2016, 18:29
quelle

1 Antwort

4

Daniel Wagner erwähnte in den Kommentaren, dass generic-random dazu in der Lage ist. Es war die Bibliothek, nach der ich suchte, aber die Dokumente machten mir nicht klar, dass dies der Fall war. Kürzlich veröffentlichte Brent Yorgey ein ziemlich klares Tutorial in seinem Blog, in dem ausführlich beschrieben wurde, wie generic-random verwendet werden kann, um das zu tun, wonach ich gefragt habe und mehr. Der Blogbeitrag kann hier gefunden werden .

Für meinen Fall ist die Lösung einfach. Verwenden von Generic.Random.Generic von generic-random :

%Vor%     
carpemb 25.09.2016, 16:23
quelle

Tags und Links