2011-02-07 11 views
6

Per scopi di debug mi piacerebbe avere una funzione in OCaml che converta in string di tipo arbitrario, al momento il debugger ne ha uno, ma sarebbe bello averne uno.Scrittura di una funzione con tipo 'a -> stringa

La libreria sexplib sarebbe perfetta, ma il fatto è che non posso modificare tutti i tipi che ho bisogno di aggiungere with sexp e non posso nemmeno usare camlp4.

Esiste una tale funzione? (Non sarà sul codice di produzione quindi accetto le soluzioni sporche)

Qualcosa come la classe Show di Haskell sarebbe esattamente quello che intendo.

Grazie per il vostro tempo

+0

> La classe di tipo 'Show' di Haskell è davvero interessante, ma OCaml non ha classi di tipi ... l'equivalente più prossimo in OCaml sarebbe un tipo di classe esplicito con un metodo show. Probabilmente non quello che hai in mente. –

risposta

5

Il modulo Std in Batteries Included fornisce una funzione dump che converte i tipi arbitrarie in stringhe leggibili. È un po 'limitato - dato che non conosce i tipi, non può stampare correttamente i costruttori per i tipi di varianti e li sostituisce con i numeri - ma può comunque essere piuttosto utile. Dal momento che le informazioni sul tipo non sono disponibili in fase di runtime, questo è quanto di meglio si possa fare. Il debugger e il toplevel usano l'inganno del compilatore per ottenere rappresentazioni migliori, ma questo è difficile se non impossibile da fare in una biblioteca generale.

Mi sembra di ricordare anche di vedere una libreria di dumping più sofisticata da qualche parte, ma non ricordo dove.

Problemi correlati