副作用を使用する場合、THの機能を安全にする適切な方法はありますか?たとえば、コンパイル時にgitを呼び出して、バージョン文字列を生成する関数が必要です。
{-# LANGUAGE TemplateHaskell #-}
module Qq where
import System.Process
import Language.Haskell.TH
version = $( [| (readProcess "git" ["rev-parse", "HEAD"] "") |] )
バージョンのタイプはIO文字列です。ただし、バージョンには実行時の副作用がまったくなく、コンパイル時にのみ副作用があります。unsafePerformIOを使用せずに実行時に純粋にする方法はありますか?