有没有办法获取定义函数的文件的路径?
例如:
rootappdir
|- Foo.hs
|- Bar.hs
module Foo where
getThisDir :: IO Filepath
getThisDir = ...
prelude> getThisDir
absolute/path/to/rootappdir/Foo.hs
如果可以使用更简单的函数:: Filepath,那就更好了。 也许我们需要使用预处理器?
答案 0 :(得分:7)
您需要使用Template Haskell来执行此操作。
{-# LANGUAGE TemplateHaskell #-}
import Data.Functor
import Language.Haskell.TH
import System.Directory
import System.FilePath
filePath :: String
filePath = $(do
dir <- runIO getCurrentDirectory
filename <- loc_filename <$> location
litE $ stringL $ dir </> filename)
答案 1 :(得分:3)
我想您无法在运行时获取此信息。但是你可以使用函数Language.Haskell.TH.location
或qLocation
通过Template Haskell在编译时获得它。
如果您需要记录功能,可以使用package monad-logger。您可以在那里找到使用qLocation
的示例。