是否可以使用模板 haskell 来获取当前文件的名称?

Is it possible to use template haskell to get the name of the current file?

我能看到的最接近的是使用 reifyModule and thisModule,但这不起作用。

{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH
import Language.Haskell.TH.Syntax

main = putStrLn $(LitE . StringL . show <$> thisModule)

(毫不奇怪)无论文件名如何,都会返回 Module (PkgName "main") (ModName "Main")

您可以使用location获得它。

{-# LANGUAGE TemplateHaskell #-}
import Language.Haskell.TH
import Language.Haskell.TH.Syntax

main = putStrLn $(LitE . StringL . loc_filename <$> location)