Haskell: различия между версиями
м (→современный {{pkg|cabal}}: про добавление в PATH) |
м (→современный {{pkg|cabal}}: typo) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 9: | Строка 9: | ||
==современный {{pkg|cabal}}== | ==современный {{pkg|cabal}}== | ||
(TODO: современный {{pkg|cabal}} упаковать в | (TODO: современный {{pkg|cabal}} упаковать в Sisyphus.) | ||
Можно, чтобы при сборке и установке пакетов {{cmd|cabal}}-ом не пересобиралась куча пакетов-зависимостей (и не ждать больше), сначала в систему поставить некоторый набор из Sisyphus. (Хотя это будет означать, что будут использованы не самые свежие их версии. Но всё равно разрешённые, конечно.) Например: | Можно, чтобы при сборке и установке пакетов {{cmd|cabal}}-ом не пересобиралась куча пакетов-зависимостей (и не ждать больше), сначала в систему поставить некоторый набор из Sisyphus. (Хотя это будет означать, что будут использованы не самые свежие их версии. Но всё равно разрешённые, конечно.) Например: | ||
Строка 22: | Строка 22: | ||
Один из способов поместить установленный пользователю {{cmd|cabal}}-ом исполняемый файл (в данном случае, сам {{cmd|cabal}}) в PATH: | Один из способов поместить установленный пользователю {{cmd|cabal}}-ом исполняемый файл (в данном случае, сам {{cmd|cabal}}) в PATH: | ||
$ ln -s ~/.cabal/bin/cabal ~/bin -v | $ ln -s ~/.cabal/bin/cabal ~/bin/ -v | ||
После этого нужно, чтобы shell не вызывал старый "закешированный" cabal (можно по-простому заново зайти). | После этого нужно, чтобы shell не вызывал старый "закешированный" cabal (можно по-простому заново зайти). |
Текущая версия от 17:56, 5 января 2016
Вот некоторые заметки по работе с Haskell/GHC.
Сейчас упакованы старые версии библиотек и старая версия компилятора. Для чего-то этого достаточно, для чего-то может быть недостаточно.
К счастью, использование нужных Вам при программировании, несовместимых друг с другом версий библиотек осуществляется несложным образом при помощи современного cabal, поддерживающего sandboxes. (Про смену компилятора тут речь не идёт.)
современный cabal
(TODO: современный cabal упаковать в Sisyphus.)
Можно, чтобы при сборке и установке пакетов cabal-ом не пересобиралась куча пакетов-зависимостей (и не ждать больше), сначала в систему поставить некоторый набор из Sisyphus. (Хотя это будет означать, что будут использованы не самые свежие их версии. Но всё равно разрешённые, конечно.) Например:
# apt-get install ghc7.6.1-cabal-install ghc7.6.1 ghc7.6.1-darcs ghc7.6.1-language-c ghc7.6.1-happy ghc7.6.1-alex
Теперь устанавливаем пользователю новую версию cabal-install (с поддержкой sandboxes):
$ cabal update $ cabal install cabal-install
Один из способов поместить установленный пользователю cabal-ом исполняемый файл (в данном случае, сам cabal) в PATH:
$ ln -s ~/.cabal/bin/cabal ~/bin/ -v
После этого нужно, чтобы shell не вызывал старый "закешированный" cabal (можно по-простому заново зайти).
Другой способ -- получить сразу все подконтрольные cabal-у программы: добавлять в PATH ~/.cabal/bin/cabal. Простой пример из конца ~/.bash_profile:
export PATH=~/.cabal/bin:"$PATH" # ... # other additions to PATH export PATH=~/.golang/bin:"$PATH" # ~/bin should have a priority export PATH=~/bin:"$PATH"
jobs
Заодно можно включить использование многих процессоров, что поддерживается в новом cabal:
$ fgrep jobs ~/.cabal/config -- jobs: $ subst 's|^-- jobs:$|jobs: $ncpus|' ~/.cabal/config $ fgrep jobs ~/.cabal/config jobs: $ncpus $
(Однако в таком режиме при сборке не будут печататься предупреждения компилятора и т.п., потому что параллельно будет идти несколько сборок.)