ここは俺の備忘録だ

少なくとも日本語での言及が少ない話をするつもりです

Haskell/GHCでプロジェクト上のデータファイルのパスを取得する

近況

GHCでWord2Vec(fasttextベース)を実装しており、詰まりと知見獲得を繰り返している。 新機能に関する言及は多いのに実際の開発知見となるとヒット率が目減りしてしまうのは苦しい所であるが、 現代ではStack OverflowやHaskell-jpという素晴らしい集まりがあり、ハードルも随分下がったと言えるだろう。 この詰まりはそのままネット上の情報の薄さでもあるため、これをブログに残していくことでコミュニティへの還元とする。

仮定

(間接的にでも)Cabalの使用を仮定する。現代的な環境であるStackを用いている人が殆どであるから問題無いだろう。

解決策

cabalのdata-filesフィールドを用いる。詳細は以下。

Cabal User Guide: Developing Cabal packages

data-filesフィールドにパスを記述するとPaths_<パッケージ名>モジュールにてgetDataFileName関数が使えるようになる。hpackでも同じフィールドが利用可能。 stackから入ったユーザ(私)はcabalで一回は躓くのでマニュアルはしっかり読んでおきたい。