Haddockでお手軽ドキュメント作成(仮)

静的型付けの関数型言語で「設計」と言えば、「型設計」の事になりまして、変に頑張ってOfficeツール*1で文章書いたりとかするより、スタブコードべろべろ書いてコンパイルが通った時点でそれを元にドキュメントを書き起こしたほうが圧倒的に正確だし効率が良いんじゃないかと、思うわけです。
で、JavaDocとかXMLDocumentみたいに、ソースコードのコメントから資料を生成する事ができるツールも割と一般的だったりするのですが、我らがHaskellも例に漏れず、Haddockというツールでドキュメントの自動生成ができたりします。

というわけで、簡単なHaddockの使い方を、ざざざっと纏めてしまいましょー。
インストール方法の話は環境によってまちまちと思われるので割愛。*2

まず、てけとーな場所に、以下の3ファイルを用意します。

Main.hs

-- |module of main
module Main where
import Data.MyFunctor
import Data.MyList

-- |main program uses MyFunctor and MyList 
main :: IO ()
main = print $ mymap (*2) (MyList 5 (MyList 10 (MyList 15 Nil)))

Data/MyFunctor.hs

-- | module for reinventing functor 
module Data.MyFunctor(MyFunctor(..)) where

-- | reinventing functor
class MyFunctor f where
  -- | reinventing fmap
  mymap :: (a -> b) -> f a -> f b

Data/MyList.hs

-- | module for reinventing list
module Data.MyList(MyList(..)) where
import Data.MyFunctor

-- | reinventing list
data MyList a = MyList a (MyList a) | Nil deriving (Show, Read, Eq)
-- | MyList is instance of MyFunctor
instance MyFunctor MyList where
  mymap _ Nil = Nil
  mymap f (MyList x xs) = MyList (f x) (mymap f xs)

runghcでちゃんと動く事を確認したら、haddockコマンドを入力...

$ mkdir Docks
$ haddock -h Main.hs -o Docks
haddock coverage for ./Data/MyFunctor.hs:     2/2 100%
haddock coverage for ./Data/MyList.hs:     2/2 100%
haddock coverage for Main.hs:     2/2 100%
Warning: Main: could not find link destinations for:
    GHC.Types.IO

すると、Docks内に次の画像のように、詳細なHTMLドキュメントが作成され・・・
・・・(´・ω・`)おや?MyListがMyFunctor型クラスのインスタンスだとゆー情報が何処にも無いですね・・・
Preludeや、外部モジュール等の関数が全てWarningとして列挙されてしまっていますし、要確認。

あと、バージョンにもよるのかもしれませんが、ブログ主の環境では日本語が使えないみたいです。
まぁ、最悪日本語が使えないのは、ローマ字頑張ってナンチャッテ英語書けば良さそうですが、型クラスのインスタンス情報が表示されないのはちょっと致命的ですね・・・
Hackageとか見てみるとちゃんと出力されてるみたいなので、もうちょっと調べてみることにします。

*1:本当はOffice・・・特に表計算ソフトでドキュメントを書く事に不満があったりもするのですが、その話はもうちょっと考えが纏まってからゆっくりと・・・

*2:ブログ主の環境はUbuntuなので、apt-get installで楽々でしたが。