Что такое опция -i при компиляции файла hs с помощью GHC и как сделать то же самое в GHCi?

Хорошо, я использовал параметр компиляции -i, чтобы указать папку для некоторого источника haskell, когда я компилирую с использованием GHC.

ghc -threaded -i/d/haskell/src --make xxx.hs

Я понимаю, что он использует эти файлы как «библиотеки» при компиляции, но могу ли я сделать то же самое в GHCi?

Я обычно импортирую предварительно упакованную библиотеку haskell, например. import Data.List или :m +Data.List.

Пробовал import /d/haskell/src - не работает!

ИЗМЕНИТЬ Из документа Haskell: Глава 2 Использование GHCi Обратите внимание, что в режимах GHCi и ––make параметр -i используется для указания пути поиска исходных файлов, тогда как в стандартном режиме пакетной компиляции параметр -i используется для указания пути поиска файлов интерфейса.


person vis    schedule 24.06.2011    source источник


Ответы (2)


Флаг '-i' в порядке, проблема в загрузке модуля.

Внутри ghci :m переключится только на предварительно скомпилированные модули или модули, указанные в командной строке. Вам нужно использовать :add MyModule, чтобы указать ghci для компиляции исходного файла Haskell.

Если у вас есть

./src/Module/SubModule.hs

вы можете загрузить его следующим образом:

localuser$ ghci -isrc
GHCi, version 7.0.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package ffi-1.0 ... linking ... done.
Prelude> :add Module.SubModule
[1 of 1] Compiling Module.SubModule        ( src/Module/SubModule.hs, interpreted )
Ok, modules loaded: Module.SubModule.
*Module.SubModule>
person John L    schedule 24.06.2011
comment
Мне удалось обойтись, выполнив: ghci -i/d/haskell/src (обратите внимание, что после -i нет пробела). Затем мне все еще нужно было загрузить свой модуль с помощью :load, или я протестировал :add, чтобы он работал так же. - person vis; 24.06.2011
comment
Вы также можете указать это напрямую в качестве аргумента, ghci -i/d/haskell/src /d/haskell/src/Module.hs Если вы загружаете только один модуль, вам даже не нужен -i, но у меня обычно есть много подмодулей, которые ghci не найдет иначе. - person John L; 24.06.2011

Я думаю, вы можете сказать :set -i /d/haskell/src; многие, но не все, параметры GHC могут быть установлены таким образом. В качестве альтернативы вы можете использовать его напрямую как параметр: ghci -i /d/haskell/src.

person geekosaur    schedule 24.06.2011
comment
обратите внимание, что между -i и /d/haskell/src нет пробелов. Если я попытаюсь скомпилировать с пространством, я получаю эту ошибку: targer ... is not a module name or a source file. И я попробовал то, что вы сказали, но я все еще не могу использовать функции, определенные в этих файлах в указанном каталоге. - person vis; 24.06.2011