Bagaimana untuk benar berkomunikasi compile-time informasi untuk Template Haskell fungsi?
Saya perlu untuk mengkomunikasikan suatu informasi dari mengkompilasi script ke Template Haskell. Saat ini mengkompilasi script menjaga informasi dalam sistem lingkungan, sehingga aku hanya membacanya menggunakan Sistem.Lingkungan.getEnvironment
dibungkus runIO
. Apakah ada cara yang lebih baik, seperti melewati beberapa argumen untuk ghc
(mirip dengan -D...
untuk C pre-processor), atau mungkin sesuatu yang khusus dirancang untuk tujuan ini di TH?
69
2
Karena begitu banyak orang yang tertarik pada pertanyaan, saya'll menambahkan pendekatan saat ini, mungkin seseorang akan menemukan itu berguna. Mungkin cara terbaik adalah jika TH diizinkan untuk membaca
-D
parameter pada GHC's command line, tapi tampaknya tidak ada yang seperti ini dilaksanakan saat ini.Modul sederhana ini memungkinkan TH untuk membaca waktu kompilasi lingkungan. Fungsi pembantu juga memungkinkan untuk membaca file; misalnya membaca path dari file konfigurasi dari lingkungan dan kemudian baca file.
Sepertinya apa yang anda coba lakukan di sini, option-D di ghc tampaknya untuk menentukan waktu kompilasi variabel.
Di sini, pada subjek yang sama adalah pertanyaan yang tampaknya juga menjawab bagian lain dari pertanyaan anda. Dari apa yang saya tahu, untuk melakukan kompilasi bersyarat, anda melakukan sesuatu seperti: