haddockのインクリメンタルサーチ
ちょっと作ってみた。そもそもなんで付いていないんだろうか。
cabalでローカルにあるライブラリを使う
課題
- ローカルに自作ライブラリのソースコードがある。
- ライブラリ側の変更はない仮定(安定している仮定)。
- そのライブラリを使うプログラムをローカルで作りたい。
- ライブラリのソースコードとディレクトリは別にするが、cabalプロジェクトを作る。
- ライブラリ側はlibraryディレクトリ配下、プログラムはsrc配下のようにする。
- ライブラリ側のコードも一緒にコンパイルされるので、ビルドに時間がかかる。 ⇨ なんとかしたい
解決策
- ライブラリ単独でcabalプロジェクトにして、それをプログラム側のcabalプロジェクトにインストールする。
やり方
- ライブラリ用のcabalプロジェクトを作成する。
> cabal sandbox init などなど
name: mylibrary version: 0.1.0.0 省略 library exposed-modules: Foo.Bar.X , Foo.Bar.Y , Foo.Bar.Z , などなど
- ライブラリモジュールを作成する(ビルドする)。
> cabal build
- 上記のライブラリを利用するcabalプロジェクトを作成する。まずは、ライブラリを意識せずにプロジェクトを作成する。
> cabal sandbox init いろいろ
- ライブラリプロジェクトを取り込む。
> cabal sandbox add-source ライブラリがあるパス(のcabalファイルの親ディレクトリのパス)
- cabalファイルの依存関係の指定をする。
executable myprogram main-is: Main.hs other-extensions: BangPatterns, DeriveDataTypeable, DeriveGeneric, FlexibleInstances, MultiParamTypeClasses build-depends: base >=4.9 && <4.10 その他いろいろ , mylibrary <-- ここにライブラリ名を追加
- インストール
> cabal install
- 再度やり直したいときは、取り込んだライブラリプロジェクトをいったん削除する。その後、もう一度インストールをする。
> cabal sandbox delete-source ライブラリがあるパス(のcabalファイルの親ディレクトリのパス)