如果使用副作用,是否有任何适当的方法可以使 TH 的功能安全?说,我想要一个在编译时调用 git 并生成版本字符串的函数:
{-# LANGUAGE TemplateHaskell #-}
module Qq where
import System.Process
import Language.Haskell.TH
version = $( [| (readProcess "git" ["rev-parse", "HEAD"] "") |] )
版本类型为 IO String。但是版本在运行时完全没有副作用,它只在编译时有副作用。有没有办法在不使用 unsafePerformIO 的情况下让它在运行时纯净?