haskell-jp / questions #104 at 2023-09-29 11:20:19 +0900

https://github.com/haskell/haskell-language-server/issues/365
https://haskell-language-server.readthedocs.io/en/latest/troubleshooting.html#static-binaries
template haskellとhlsって相性が悪いのですね。
hls使ってないので、ハマらずに済んでいますが、一般的にどうやって解決していますか?
hlsを直すのは難しいのでパッケージのtemplate haskellのコードを直すのが一般的なのでしょうか?
Hiromi ISHII / mr_konn
これはTHというよりも、THとFFIが絡むような場合の話ですね。普通のTHとの組み合わせは大体問題なく動きます。
Hiromi ISHII / mr_konn
THとFFIが絡む場合は、 -fobject-codeをつければ大まかにうまく行く場合が多いです
Hiromi ISHII / mr_konn
ふたつ目の公式ドキュメントの話は静的バイナリだとうまく動かないという話で、いまのHLSは各プラットホームごとにDynamic binary で配布されているので問題はほとんどないです
Hiromi ISHII / mr_konn
ぜひ使ってみてください
-fobject-codeというのはHLSのオプションでしょうか?
パッケージの方につけるのですね。
Hiromi ISHII / mr_konn
GHC_OPTIONSでモジュールにつけるかたちです
なるほど。だいたいオプションをつけると解決ということですね。
https://github.com/fpco/inline-c/pull/128
こういうのもその解決法でいけますか?
試してみないとわからないですよね。
Hiromi ISHII / mr_konn
まさにこのバグに噛まれたことがあって、-fobject-codeだけではだめで、inline-cの場合は定義をモジュール間で移動すると通る場合があり、やや苦労しましたね
Hiromi ISHII / mr_konn
contextが絡んでくるとややこしくなります
そうなんですね。なんか解決方法がおかしいような気もしつつ、難しいのですね。
Hiromi ISHII / mr_konn
まあ完璧な解決策ではないですねえ……
ありがとうございます。