2011-02-07 21 views
6

Para depurar me gustaría tener una función en OCaml que convierta a cadena de tipo arbitrario, el depurador actualmente tiene una, pero sería genial tener una.Escribiendo una función con el tipo 'a -> cadena

La biblioteca sexplib sería perfecta, pero el hecho es que no puedo modificar todos los tipos que necesito para agregar with sexp, y tampoco puedo usar camlp4.

¿Existe alguna función de este tipo? (No estará en el código de producción así que acepto soluciones sucias)

Algo así como la clase de tipo Show de Haskell sería exactamente lo que quiero decir.

Gracias por su tiempo

+0

> La clase de tipo 'Show' de Haskell es realmente genial, pero OCaml no tiene clases de tipo ... el equivalente más cercano en OCaml sería un tipo de clase explícito con un método show. Probablemente no sea lo que tienes en mente. –

Respuesta

5

El módulo Std en Batteries Included proporciona una función que convierte dump tipos arbitrarios de cadenas legibles. Es algo limitado, ya que no conoce los tipos, no puede imprimir constructores para los tipos de variantes correctamente y los reemplaza por números, pero aún puede ser bastante útil. Como la información de tipo no está disponible en tiempo de ejecución, es lo mejor que puede hacer. El depurador y el nivel superior utilizan trucos de compilación para obtener mejores representaciones, pero eso es difícil, si no imposible, de hacer en una biblioteca general.

Me parece recordar también haber visto una biblioteca de volcado más sofisticada en alguna parte, pero no recuerdo dónde.

Cuestiones relacionadas