2017-02-18 4 views
4

Я думал, что было бы неплохо настроить мою глобальную конфигурацию GHCI, чтобы мой часто используемый импорт происходил автоматически, когда присутствуют пакеты, которые их предоставляют.Может ли файл конфигурации GHCI использовать макросы CPP?

Я попытался добавить это ~/.ghc/ghci.conf:

:set -XCPP 

#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 

Но, по-видимому, не работает.

> stack repl 
Configuring GHCi with the following packages: 
GHCi, version 8.0.2: http://www.haskell.org/ghc/ :? for help 

<interactive>:24:1: error: parse error on input ‘#’ 

<interactive>:29:1: error: parse error on input ‘#’ 

Есть ли способ, чтобы получить CPP макросов для работы, или какой-либо другой способ сделать то, что я пытаюсь сделать?

+0

Я предполагаю, что это .ghci работает так, как будто вы написали '#ifdef ...' в приглашении GHCi, ничего не сделав. – chi

ответ

4

Эти макросы не могут быть использованы непосредственно GHCI, но они могут быть использованы в файле, который вы используете, используя GHCI's :add command.

Например, это то, что моя установка теперь выглядит следующим образом:

  • ~/.ghc/ghci.conf содержит :add команду:

    > grep imports ~/.ghc/ghci.conf 
    :add /home/chris/.ghc/imports.hs 
    
  • ~/.ghc/imports/imports.hs содержит мой импорт CPP'ed:

    > 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 
    
+0

Благодаря [Tim Humphries] (https://twitter.com/thumphriees/status/832752388888883201) для этого решения. –

Смежные вопросы