haskell-jp / beginners #17 at 2021-07-18 15:55:22 +0900

初歩的な質問ですが、
あるHaskellファイルFoo.hsで、そこからの相対パスがMydir/Bar.hsのファイルをimportしたいのですが、
Bar.hsの内部のモジュール名をMydir.Barに書き換えずにBarのままImport方法はありますでしょうか?
残念ながらできません。
ありがとうございます。

一応、なぜこのようなことをしたいかというと、
Mydir/Bar.hsは実は自動生成されたプログラムで、内部を書き換えたくないのです。かといって、手書きしたFoo.hsと同じディレクトリに置くのも紛らわしいので、Generatedディレクトリに置いておきたかったというのが本音でした。
自動生成する側でモジュール名を工夫することは出来ないのでしょうか。
あとできないと言った後ですみません。少々面倒になるものの、パッケージを分けてcabal.projectなりstack.yamlなりで参照するという形なら一応可能です。
遅くなってすみません。
できなくはないと思いますが、ちょっと面倒なのと、
単にHaskell側でパスを通すだけで参照できたりしないのかなと思っただけです。
.cabalの hs-source-dirs (package.yamlの場合は source-dirs)には複数のディレクトリを指定できます。そこで hs-source-dirs: src src/Mydir という風に指定すれば良いです。
おっ、すみません、誤解しておりました! :man-bowing: :man-bowing: :man-bowing:
:man-bowing: すみません、 https://haskell-jp.slack.com/archives/CR2TETE5R/p1626661764150300?thread_ts=1626591322.147600&cid=CR2TETE5R のとおり、スレッド冒頭の回答は間違いでした。
よく考えたらGHCのコマンドラインオプションでも -i を使えば複数指定できますし、それをcabalから使えないのもおかしな話ですよね... :pray:
遅くなりました。
ありがとうございます!
package.yamlを変更する方法で試してみたのですが、src/Mydirに置いてしまうと、cabalファイルのexposed-modules欄にBarとMydir.Barの両方が登録されてしまって、Mydir.Barの方でエラーが出てしまうので、srcの外に置くようにしたらコンパイルが通りました。