2013-01-05 14 views
13

La libreria standard fornisce una funzione printf che riesce a essere varadica. Ciò che non fa, tuttavia, è il controllo in fase di compilazione per verificare se i tipi di argomenti corrispondono alla stringa di formato. Ciò richiederebbe tipi dipendenti, e sembra che sarebbe davvero difficile da implementare anche! (Dovresti analizzare l'intera stringa di formato usando i tipi di firma ... schifo!)Stampa sicura per tipo

Ma su riflessione, ora mi chiedo ... Possiamo farlo con Template Haskell? In effetti, qualcuno ha già scritto una libreria per questo?

(sembra che si potrebbe abbastanza facilmente scrivere un quasi-quoter che legge una specifica di formato printf e genera la funzione N-arg necessario ...)

risposta

8

Sì, è possibile. Sì, è stato fatto. Si dovrebbe controllare hackage per questo tipo di domanda: http://hackage.haskell.org/package/Printf-TH

+1

Interessante. Sto guardando Hackage ora, e non vedo ... oh aspetta, non è sotto Testo, è sotto Utils. E wow, guarda tutta la documentazione che ha ... :-( – MathematicalOrchid

+0

@MathematicalOrchid Ho appena controllato il codice sorgente e sembra che il file non sia documentato usando il markup eglefino. Strano che nessuno stia mantenendo quel pacchetto ... – Tarrasch

1

Oltre a Printf-TH, sembra che printf-mauke ha qualche TH gettato in un ripensamento troppo ... altri esempi?

6

Se si è disposti ad accettare che la "stringa di formato" non sia realmente una stringa, è possibile implementare una funzione di tipo printf direttamente anche in Haskell.

Questo è stato descritto, ad esempio, in un documento di Ralf Hinze, chiamato "Formatting: a class act". Su Hackage, posso solo trovare il pacchetto xformat implementando qualcosa di simile a questo approccio.