Haskell这个文件的路径

时间:2014-09-09 05:17:35

标签: haskell

有没有办法获取定义函数的文件的路径?

例如:

rootappdir
|- Foo.hs
|- Bar.hs


module Foo where

getThisDir :: IO Filepath
getThisDir = ...

prelude> getThisDir
absolute/path/to/rootappdir/Foo.hs

如果可以使用更简单的函数:: Filepath,那就更好了。 也许我们需要使用预处理器?

2 个答案:

答案 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.locationqLocation通过Template Haskell在编译时获得它。

如果您需要记录功能,可以使用package monad-logger。您可以在那里找到使用qLocation的示例。