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とか見てみるとちゃんと出力されてるみたいなので、もうちょっと調べてみることにします。