Haskell quickcheck - jak wygenerować tylko ciągi do druku
Mam zestaw prostych programów demonstracyjnych, które kodują / dekodują ciągi i chcą je wygenerowaćszybkie sprawdzenie testy dla nich, ale ograniczenie testów tylko do drukowalnych ciągów. Używanie strażnika jest zbyt wolne i kończy się niepowodzeniem z powodu zbyt wielu wygenerowanych i odrzuconych przypadków testowych, więc chcę utworzyć bezpieczny generator dla tej domeny.
Odniesienia do tego, które widziałem, aby albo (1) zdefiniować własneArbitralny przykładZwęglać i używaj tego do generowania tylko znaków drukowalnych dla łańcuchów, lub (2) do zawijania samych funkcji wnowy typ i napiszArbitralny na przykład.
Ale próba (1) kończy się niepowodzeniem, ponieważ istnieje teraz definicja tego w Test.QuickCheck, a więc jak to zrobić - utwórzsafeChar generator dla nowego typu, a następnie ponownie musi utworzyć adapter do testowanych funkcji? (Część poświęcona książce RWH na ten temat zauważa, że zalecanie tej definicji „DIY Char” jest nieaktualne).
Próba zrobienia (2) wydaje się, że mogę albo po prostu dodać strażnika do propozycji testowej, która jest zlokalizowana i prosta (ale nie działa), albo napisać nowy wrapper i powiązany generator, który wydaje się bardziej chaotyczny.
Oczywiście jest to proste (!) I wszystkie narzędzia są dostępne, ale czy ktoś mógłby doradzić, czy jest to poprawna analiza i podać przykład, jak najlepiej to zrobić?