GHCI 配置文件可以使用 CPP 宏吗?

Chr*_*tin 4 haskell ghci c-preprocessor

我认为最好设置我的全局 GHCI 配置,以便当提供它们的包存在时,我常用的导入会自动发生。

\n\n

我尝试将其添加到~/.ghc/ghci.conf

\n\n
:set -XCPP\n\n#ifdef MIN_VERSION_containers\nimport           Data.Set (Set)\nimport qualified Data.Set as Set\nimport           Data.Map (Map)\nimport qualified Data.Map as Map\n#endif\n
Run Code Online (Sandbox Code Playgroud)\n\n

但显然这不起作用。

\n\n
> stack repl\nConfiguring GHCi with the following packages: \nGHCi, version 8.0.2: http://www.haskell.org/ghc/  :? for help\n\n<interactive>:24:1: error: parse error on input \xe2\x80\x98#\xe2\x80\x99\n\n<interactive>:29:1: error: parse error on input \xe2\x80\x98#\xe2\x80\x99\n
Run Code Online (Sandbox Code Playgroud)\n\n

有没有办法让 CPP 宏起作用,或者有其他方法来完成我想要做的事情?

\n

Chr*_*tin 5

这些宏不能直接由 GHCI 使用,但可以在使用GHCI:add命令包含的文件中使用。

例如,我的设置现在是这样的:

  • ~/.ghc/ghci.conf包含:add命令:

    > grep imports ~/.ghc/ghci.conf
    :add /home/chris/.ghc/imports.hs
    
    Run Code Online (Sandbox Code Playgroud)
  • ~/.ghc/imports/imports.hs包含我的 CPP 导入:

    > cat ~/.ghc/imports/imports.hs
    {-# LANGUAGE CPP #-}
    
    #ifdef MIN_VERSION_containers
    import           Data.Set (Set)
    import qualified Data.Set as Set
    import           Data.Map (Map)
    import qualified Data.Map as Map
    #endif
    
    Run Code Online (Sandbox Code Playgroud)