如果說你可能會有一段時間沒辦法用網路,但又想和 haskell 相親相愛...我們可以準備好編譯器、程式庫等的安裝,但說明文件呢? 沒有說明文件的話可是會讓寫程式變得痛苦不堪!(一定會卡住,一直想著想用的到底是哪個 API,函數原型長怎樣,然後到最後只能打草稿...)
和 haskell 一起的經驗應該是快樂的!所以,我們來試著自己做文件吧!
使用cabal
(出處:見 這裡)
如果你相當把握你只會使用某些 package,那就在還可以用網路的時候使用 cabal 來製作文件吧。cabal 預設不會幫你建立文件,所以你必須修改
~/.cabal/config
。打開它,找到以下這行:
-- documentation: False然後改成
documentation: True然後重新安裝你想要文件的 package 。須注意重新安裝很多package可能會相當危險。 (這裡 有重新安裝除了 base 以外所有 package 的方法)
想要 ghc runtime library 的相關文件的話,請見下面「下載所有 haskell package」部份的 libraries.html.tar.bz2
使用這個方法建立文件的話,會有個文件索引在~/.cabel/share/doc/index.html
離線建立文件
如果說你沒把握你只會玩弄某幾個 package,而希望可以保險一點的話,那麼就想辦法把整個 hackage 裡的所有 package 都下載下來不就好了?
下載所有的 haskell package
我們會需要下面的所有東西:
-
在GHC 文件下載區選正確的版本,然後下載:
- haddock.html.tar.bz2
- libraries.html.tar.bz2
- users_guide.html.tar.bz2
- Hackage 下的 Getting the raw data,或是 下載整個Hackage archive(使用wget)
mv /path/to/00-archive.tar /tmp cd /tmp mkdir hackage cd hackage tar -xf ../00-archive.tar每個對應的 haskell package 就會存在
/tmp/hackage/PACKAGE_NAME/VERSION/PACKAGE_NAME-VERSION.tar.gz
建立文件(相依套件已存在)
文件下載好後,我們利用下面的步驟來建立文件
# in /tmp mkdir build cd build tar -xf ../hackage/array/0.4.0.1/array-0.4.0.1.tar.gz runhaskell Setup configure --builddir=./array-build --user runhaskell Setup build --builddir=./array-build runhaskell Setup haddock --builddir=./array-build # 完工\^o^/ ,去./array-build/doc 找做好的文件 # 想順便安裝的話... runhaskell Setup install # 安裝完後,也可以在 ~/.cabal/share/doc 下找到做好的文件。另外一種方法:
mkdir build cd build tar -xf ../hackage/array/0.4.0.1/array-0.4.0.1.tar.gz cabal configure cabal haddock # 此時文件會在 dist/doc/html 中 # 如果想要安裝起來,那就再執行: cabal install
如果相依套件不存在,就找到相依套件,然後使用這裡的步驟把所有的相依套件安裝起來吧!
建立文件(相依套件未存在且不想安裝)
假如你不想安裝建置好的程式庫(?),那麼你可以考慮利用這裡的方式,暫時把相依套件建立在某個暫存區內。
假設我們想安裝zip-archive, 結果發現:
$ runhaskell Setup configure --builddir=../build --user Configuring zip-archive-0.1.3.4... Setup: At least the following dependencies are missing: digest >=0.0.0.1, utf8-string >=0.3.1 $那就試試這裡的步驟吧!
(相依性資訊記載於下載下來 package 的 tar.gz 中的 .cabal 檔中的 Build-depends 內)
# in /tmp $ mkdir build $ cd build $ # 解開包裹 $ tar -xf ../hackage/utf8-string/0.3.7/utf8-string-0.3.7.tar.gz $ tar -xf ../hackage/digest/0.0.1.2/digest-0.0.1.2.tar.gz $ tar -xf ../hackage/zip-archive/0.1.3.4/zip-archive-0.1.3.4.tar.gz $ # 設定暫存位置 $ mkdir packages # package 暫存區 $ mkdir tmp # build 暫存區 $ # 設定暫時 package 註冊區 $ ghc-pkg init package-db $ # utf8-string 0.3.7 $ cd utf8-string-0.3.7/ $ runhaskell Setup configure --builddir=../tmp/utf8-string\ --prefix=`pwd`/../packages --package-db=../package-db Configuring utf8-string-0.3.7... $ runhaskell Setup build --builddir=../tmp/utf8-string Building utf8-string-0.3.7... Preprocessing library utf8-string-0.3.7... # 編譯過程,略 $ runhaskell Setup haddock --builddir=../tmp/utf8-string Running Haddock for utf8-string-0.3.7... Preprocessing library utf8-string-0.3.7... Warning: The documentation for the following packages are not installed. No links will be generated to these packages: rts-1.0 Haddock coverage: 100% ( 8 / 8) in 'Codec.Binary.UTF8.String' 94% ( 16 / 17) in 'Codec.Binary.UTF8.Generic' 89% ( 24 / 27) in 'Data.String.UTF8' 82% ( 14 / 17) in 'System.IO.UTF8' 14% ( 1 / 7) in 'System.Environment.UTF8' 100% ( 17 / 17) in 'Data.ByteString.UTF8' 100% ( 17 / 17) in 'Data.ByteString.Lazy.UTF8' Documentation created: ../tmp/utf8-string/doc/html/utf8-string/index.html $ runhaskell Setup install --builddir=../tmp/utf8-string Installing library in /tmp/build/utf8-string-0.3.7/packages/lib/utf8-string-0.3.7/ghc-7.4.1 Registering utf8-string-0.3.7... $ cd .. $ # digest 0.0.1.2 $ cd digest-0.0.1.2 $ runhaskell Setup configure --builddir=../tmp/digest --prefix=`pwd`/../packages --package-db=../package-db Configuring digest-0.0.1.2... $ runhaskell Setup build --builddir=../tmp/digest Building digest-0.0.1.2... Preprocessing library digest-0.0.1.2... [1 of 2] Compiling Data.Digest.Adler32 ( ../tmp/digest/build/Data/Digest/Adler32.hs, ../tmp/digest/build/Data/Digest/Adler32.o ) [2 of 2] Compiling Data.Digest.CRC32 ( ../tmp/digest/build/Data/Digest/CRC32.hs, ../tmp/digest/build/Data/Digest/CRC32.o ) In-place registering digest-0.0.1.2... $ runhaskell Setup haddock --builddir=../tmp/digest Running Haddock for digest-0.0.1.2... Preprocessing library digest-0.0.1.2... # 建立文件訊息,略 Documentation created: ../tmp/digest/doc/html/digest/index.html $ runhaskell Setup install --builddir=../tmp/digest Installing library in /tmp/build/digest-0.0.1.2/../packages/lib/digest-0.0.1.2/ghc-7.4.1 Registering digest-0.0.1.2... $ cd .. $ # zip-archive $ cd zip-archive-0.1.3.4/ $ runhaskell Setup configure --builddir=../tmp/zip-archive --prefix=`pwd`/../packages --package-db=../package-db Configuring zip-archive-0.1.3.4... $ runhaskell Setup build --builddir=../tmp/zip-archive Building zip-archive-0.1.3.4... Preprocessing library zip-archive-0.1.3.4... [1 of 1] Compiling Codec.Archive.Zip ( src/Codec/Archive/Zip.hs, ../tmp/zip-archive/build/Codec/Archive/Zip.o ) In-place registering zip-archive-0.1.3.4... $ runhaskell Setup haddock --builddir=../tmp/zip-archive # 建立文件訊息,略 $ runhaskell Setup install --builddir=../tmp/zip-archive Installing library in /tmp/build/zip-archive-0.1.3.4/../packages/lib/zip-archive-0.1.3.4/ghc-7.4.1 Registering zip-archive-0.1.3.4...
這樣就完成了呢!這時候文件會存放在/tmp/build/packages/share/doc/
裡面,然後你就可以開始閱讀他們了!
沒有留言:
張貼留言