Haskell quickcheck: cómo generar solo cadenas imprimibles

Tengo un conjunto de programas de demostración simples que codifican / decodifican cadenas, y quiero generar algunoscomprobación rápida pruebas para ellos, pero para limitar las pruebas a cadenas imprimibles solamente. El uso de una guarda es demasiado lento y falla debido a la cantidad de casos de prueba generados y rechazados, así que quiero crear un generador seguro para este dominio.

Las referencias a esto que he visto dicen a (1) definir la propiaArbitrario instancia paraCarbonizarse y úselo para generar solo caracteres imprimibles para cadenas, o (2) para tener que envolver las funciones en unanuevo tipo y escribe unArbitrario instancia para eso.

Pero tratar de hacer (1) falla porque ahora hay una definición para esto en Test.QuickCheck, y entonces, ¿cómo podría uno hacer esto? Crear uncaja de seguridad ¿Generador para un nuevo tipo y luego nuevamente debe producir un adaptador para las funciones probadas? (La sección del libro de RWH en esta nota indica que está desactualizada al recomendar esta definición de DIY Char).

Tratar de hacer (2) parece que puedo agregar una protección a la propuesta de prueba que es localizada y simple (pero falla), o escribir un nuevo envoltorio y un generador asociado, lo que parece más complicado.

Claramente, esto es simple (!) Y se proporcionan todas las herramientas, pero ¿podría alguien avisar si este es un análisis correcto y dar un ejemplo de cómo hacer esto de la mejor manera?