2012-05-17 56 views
9

給定一個Haskell項目,是否有自動計算整個依賴項列表的方法?所有依賴的庫以及已包含但不是必需的庫。自動列出項目的依賴關係

+0

Cabal確實在運行'cabal init'時試圖找出依賴關係。這是你想到的那種功能嗎? –

+0

在什麼階段?我使用cabal init,並沒有找出任何依賴關係。 –

+1

什麼階段?您已經編寫了一些代碼並準備好整理項目的階段(創建.cabal文件)。一個足夠新的cabal版本將讀取模塊並嘗試推斷依賴關係。 –

回答

8

正如我在評論中所說的,cabal-install已經通過模塊查找(如GHCi)猜測包來做到這一點(我正在使用cabal-install 0.14.0)。它沒有任何真正的智慧w.r.t.版本,所以它只是將版本設置爲您安裝的主要版本。

下面你可以看到我製作一個虛擬包,導入Data.Vector和cabal-install推斷我使用的是矢量0.9。*。

[[email protected] blah]$ pwd 
/tmp/blah 
[[email protected] blah]$ cat Data/Blah.hs 
module Data.Blah where 

import Data.Vector 
[[email protected] blah]$ cabal init 
Package name? [default: blah] 
...SNIP... 
What does the package build: 
    1) Library 
    2) Executable 
Your choice? 1 
Include documentation on what each field means (y/n)? [default: n] 

Guessing dependencies...   <--- SEE, SEE! YAY! 

Generating LICENSE... 
Warning: unknown license type, you must put a copy in LICENSE yourself. 
Generating Setup.hs... 
Generating blah.cabal... 

You may want to edit the .cabal file and add a Description field. 
[[email protected] blah]$ cat blah.cabal 
-- Initial blah.cabal generated by cabal init. For further documentation, 
-- see http://haskell.org/cabal/users-guide/ 

name:    blah 
version:    0.1.0.0 
synopsis:   Sisponys 
-- description:   
-- license:    
license-file:  LICENSE 
author:    Me 
maintainer:   [email protected] 
-- copyright:   
-- category:    
build-type:   Simple 
cabal-version:  >=1.8 

library 
    exposed-modules:  Data.Blah 
    -- other-modules:  
    build-depends:  base ==4.5.*, vector ==0.9.* <-- SEE?? SEE! YIPPEE!! 
+0

我正在使用'cabal-install version 0.10.2'。這是與Haskell平臺捆綁在一起的版本,所以我想這是最近的功能。 –

+0

@VladtheImpala我猜你需要最新的0.14.0版本。它包括各種'cabal init'改進。 –