2015-04-18 1 views
3

В системе сборки haskell, Cabal, а также runhaskell имеет почти такой же набор подкоманд, configure, build. Для runhaskell, это:Cabal Vs runhaskell, когда использовать?

runhaskell Setup.hs configure 
runhaskell Setup.hs build 

... в то время как для заговорщиков это:

cabal build 
cabal configure 

Так что, когда я должен использовать какую команду? У обеих команд одинаковые функциональные возможности?

Могу ли я запустить runhaskell без доступа к sudo, потому что я вижу runhaskell делает записи внутри /opt/ghc/7.8.4/lib, тогда как cabal работает в режиме sudo/non-sudo?

+0

Когда вы видите 'runhaskell' создание записей в'/opt/ghc/7.8.4/lib'? – Sibi

+0

извините, я видел в этой ссылке http://bob.ippoli.to/archives/2013/01/11/getting-started-with-haskell/, используются две команды ... runhaskell Setup.hs configure && runhaskell Setup.hs build ... который помещает меня в суп ... –

+0

Я вижу записи в /opt/ghc/7.8.4, когда я дал неправильный cmd - 'runhaskell Setup.hs install' ... теперь я понятен , я не могу использовать install с 'runhaskell' –

ответ

5

cabal и runhaskell служат совершенно другим целям. runhaskell используется для выполнения программ Haskell без , имеющих необходимость их компиляции. Вы можете разместить это в верхней части файла Haskell: #!/usr/bin/env runhaskell и дать ему возможность сценариев. cabal - это менеджер пакетов и система сборки для Haskell.

Также cabal и runhaskell не разделяет их суб-команды, как configure, build, install и т.д.


я видел в этой ссылке bob.ippoli.to/archives/2013/01/11/получение стартером-с-Haskell, две команды, которые используются ... runhaskell Setup.hs настройки & & runhaskell Setup.hs построить

Обычно Setup.hs имеет следующий код, когда генерируется из cabal init:

import Distribution.Simple 
main = defaultMain 

Теперь, если вы видите реализацию defaultMain:

defaultMain :: IO() 
defaultMain = getArgs >>= defaultMainHelper simpleUserHooks 

Так что вы передаете на самом деле команда аргументы строки, которые могут быть ничего , На самом деле вы можете проверить, что сами:

$ runhaskell Setup.hs invalid_argument 
unrecognised command: invalid_argument (try --help) 
2

runhaskell не имеет подкомандами:

$ runhaskell --help
Использование: runghc [runghc флаги] [GHC флаги] модуль [программа args]

Он берет путь к исходному файлу Haskell и выполняет его сразу. Поэтому вы должны использовать его, когда все, что вам нужно, - запустить некоторый код Haskell, который у вас есть. Конечно, вы можете использовать runhaskell без доступа суперпользователя; Я сомневаюсь, что он создает что-либо в /opt.

Cabal - это система сборки для проектов Haskell, цель которой заключается в преобразовании источников Haskell в двоичные файлы.

0

Проблема заключается в том, что руководство пользователя Cabal имеет инструкции по всей партии для настройки, сборки и установки с использованием runhaskell! И не ясно, когда использовать команды cabal и когда использовать runhaskell или они взаимозаменяемы. Эта целая система является слабым звеном в Haskell (например, никоим образом не удалять пакет, усугубляемый предупреждениями о том, что переустановки «всегда опасны» без каких-либо объяснений, так как вы разрабатываете, устанавливаете по мере разработки, если переустановка - опасным "?), реальным препятствием для использования языка или, по крайней мере, ghc.