Объединяйте модули в пакеты (или, возможно, создавайте пакеты с одним модулем). Если вы еще этого не сделали, прочитайте Cabal руководство пользователя. Каждый пакет, как и любой другой код, должен находиться под контролем версий (git, darcs и т. д.), хотя это, строго говоря, не обязательно для ваших нужд.
Допустим, у вас есть один такой пакет, foo
, содержащий модули Common.Foo
и Common.Foo.Types
, то есть у вас есть папка, содержащая Common/Foo.hs
и Common/Foo/Types.hs
, и файл foo.cabal
с exposed-modules: Common.Foo Common.Foo.Types
.
Проекты, в которых вы хотите использовать Common.Foo
, также должны быть пакетами клики и, помимо очевидного import Common.Foo
в исходных файлах Haskell, должны иметь файл .cabal
с build-depends: foo
.
Затем, всякий раз, когда вы меняли модули пакета foo
, вы можете просто ввести cabal install --force-reinstalls
† (из каталога foo
s). Это обновит локальный реестр пакетов, и когда вы затем cabal configure
и cabal build
создадите другой проект, используя foo
, он получит доступ к изменениям.
Подумайте также о том, чтобы фактически опубликовать свой пакет на Hackage (конечно, не забудьте поставить ему ясное, описательное имя!), то вам даже не придется беспокоиться о получении исходного кода и компиляции при переключении на другую машину — cabal может сделать это за вас.
†--force-reinstalls
необходим только после того, как вы также install
отредактировали один из пакетов, зависящих от foo
. После переустановки foo
вы должны также пересобрать их — это небольшой недостаток в том, как Cabal-install регистрирует установки. Это станет ненужным в будущем.
person
leftaroundabout
schedule
30.07.2017
cabal sandbox add-source
со всеми вашими библиотеками. - person arrowd   schedule 31.07.2017