2013年6月17日 星期一

想要離線的 haskell 文件哪裡找?

如果說你可能會有一段時間沒辦法用網路,但又想和 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)
如果下載的是 Getting raw data 中的 00-archive.tar, 則:
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/裡面,然後你就可以開始閱讀他們了!

沒有留言:

張貼留言