Haskell: различия между версиями

Материал из ALT Linux Wiki
(Вот некоторые заметки по работе с Haskell/GHC.)
 
м (→‎современный {{pkg|cabal}}: про добавление в PATH)
Строка 20: Строка 20:
  $ cabal install cabal-install
  $ cabal install cabal-install


После этого нужно, чтобы shell не вызывал старый cabal (можно по-простому заново зайти).
Один из способов поместить установленный пользователю {{cmd|cabal}}-ом исполняемый файл (в данном случае, сам {{cmd|cabal}}) в PATH:
 
$ ln -s ~/.cabal/bin/cabal ~/bin -v
 
После этого нужно, чтобы shell не вызывал старый "закешированный" cabal (можно по-простому заново зайти).
 
Другой способ -- получить сразу все подконтрольные {{cmd|cabal}}-у программы: добавлять в PATH {{path|~/.cabal/bin/cabal}}. Простой пример из конца {{path|~/.bash_profile}}:
 
<pre>
export PATH=~/.cabal/bin:"$PATH"
 
# ...
# other additions to PATH
export PATH=~/.golang/bin:"$PATH"
 
# ~/bin should have a priority
export PATH=~/bin:"$PATH"
</pre>


===jobs===
===jobs===
Строка 30: Строка 47:
$ fgrep jobs ~/.cabal/config
$ fgrep jobs ~/.cabal/config
jobs: $ncpus
jobs: $ncpus
$ ln -s ~/.cabal/bin/cabal ~/bin -v
«/home/imz/bin/cabal» -> «/home/imz/.cabal/bin/cabal»
$  
$  
</pre>
</pre>


(Однако в таком режиме при сборке не будут печататься предупреждения компилятора и т.п., потому что параллельно будет идти несколько сборок.)
(Однако в таком режиме при сборке не будут печататься предупреждения компилятора и т.п., потому что параллельно будет идти несколько сборок.)

Версия от 00:14, 5 января 2016


Вот некоторые заметки по работе с Haskell/GHC.

Сейчас упакованы старые версии библиотек и старая версия компилятора. Для чего-то этого достаточно, для чего-то может быть недостаточно.

К счастью, использование нужных Вам при программировании, несовместимых друг с другом версий библиотек осуществляется несложным образом при помощи современного cabal, поддерживающего sandboxes. (Про смену компилятора тут речь не идёт.)

современный cabal

(TODO: современный cabal упаковать в Siysphus.)

Можно, чтобы при сборке и установке пакетов 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
$ 

(Однако в таком режиме при сборке не будут печататься предупреждения компилятора и т.п., потому что параллельно будет идти несколько сборок.)