2011-06-24 5 views
0

Хорошо, я использовал параметр компиляции -i, чтобы указать папку для некоторого источника haskell при компиляции с использованием GHC.Что такое опция -i при компиляции hs-файла с использованием GHC и как это сделать в GHCi?

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

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

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

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

EDIT С Haskell документа: Chapter 2 Using GHCi Обратите внимания, что в GHCi и режиме ––make, опция -i используется, чтобы указать путь поиска для исходных файлов, в то время как в стандартном режиме пакетной компиляции опция -i используются для укажите путь поиска для файлов интерфейса.

ответ

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

Мне удалось обойтись: 'ghci -i/d/haskell/src' (обратите внимание, что после' -i' нет пробела). Затем мне все еще нужно было загрузить мой модуль, используя ': load' или i tested': add', чтобы работать то же самое. – vis

+0

Вы также можете указать его как аргумент, 'ghci -i/d/haskell/src/d/haskell/src/Module.hs' Если вы загружаете только один модуль, вам даже не нужен' -i ', но у меня обычно есть много подмодулей, в которые ghci не найдет иначе. –

0

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

+0

примечание нет пространства между '' -i' и/d/Haskell/src'. Если я пытаюсь скомпилировать с пространством, я получаю эту ошибку: 'targer ... не является именем модуля или исходным файлом'. И я попробовал то, что вы сказали, но я все еще не могу использовать функции, определенные в этих файлах в указанном каталоге. – vis

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

  • Нет связанных вопросов^_^