Различное поведение Cabal repl для библиотеки и исполняемого файла

Использование cabal repl, кажется, вообще ничего не делает при использовании в библиотечных проектах, но отлично работает для исполняемых проектов. Это ожидаемое поведение, которое я просто не понимаю?

Если у меня есть файл, содержащий просто

go = putStrLn "test"

и используйте cabal init со всеми значениями по умолчанию (но выберите «библиотека» в качестве типа), тогда запуск cabal repl просто выводит некоторый текст о настройке и предварительной обработке библиотеки и никогда не входит в среду REPL. Те же самые шаги, но с выбранным типом «исполняемый файл», приводят меня прямо в GHCi, как и ожидалось.

Код отлично работает при загрузке непосредственно в GHCi.


person Karl    schedule 02.06.2014    source источник
comment
Вы указали этот файл как открытый модуль? Я думаю, что cabal repl загрузит его только в том случае, если вы его указали, но это непроверенное предположение.   -  person bheklilr    schedule 02.06.2014
comment
@bheklilr Спасибо за идею, но проблема не в этом. Я пробовал это как с линией модуля, так и без нее и получил тот же результат.   -  person Karl    schedule 02.06.2014
comment
Ну, вам понадобится именованный модуль, но вам также нужно указать его в файле клики вашего проекта как включенный модуль. Вы тоже пробовали это?   -  person bheklilr    schedule 02.06.2014
comment
Вот и все, вы были правы в первый раз. Если вы хотите создать реальный ответ, я буду рад отметить его как принятый.   -  person Karl    schedule 02.06.2014


Ответы (1)


Чтобы cabal repl загрузил ваши модули, вы должны сначала назвать их в коде, а затем указать их в файле .cabal вашего проекта как выставленные:


-- MyModule.hs
module MyModule where

go = putStrLn "test"

-- MyProject.cabal
name: MyProject
-- other info ...

library
    exposed-modules: MyModule
    -- other options ...

Затем, когда вы запустите cabal repl, у него будет доступ ко всему в вашей песочнице (если она есть) и открытым модулям. Это также может работать, если вы укажете их как other-modules вместо exposed-modules, но я не пробовал это.

person bheklilr    schedule 02.06.2014