haskell-jp / questions #103

ghc-bignum ってデフォルトが native になってますけど, これを gmp にしようと思ったら ghcup でGHCをインストールする時点でなんとかしないといけないですか…?
... Replies ...
@ has joined the channel
GHC 9.4 で stdc++ に依存するようになってしまったようですが、その理由はなんでしょうか?
centos だと、configure が stdc++ を見つけられずに、インストールできません。。。
... Replies ...
@kk has joined the channel
@gan20 has joined the channel
@HN has joined the channel
@まど has joined the channel
@ai-ou has joined the channel
@yoshitsugu has joined the channel
https://haskell-jp.slack.com/archives/CL3AXB1AL/p1675402815431589 (at atcoder-lang-update)
がんばりました。直接installしていない物も含む、全transitive dependencyのライセンスのリスト: 
この件で,あるパッケージ群の全transitive dependenciesからlicenseを取ってくる作業をしたのですが,私の知識の範囲でできる限り車輪の再開発を避けて:
1. cabal-installにdependencyを解いてもらい,
2. それをもとにHackage API を叩いて .cabal ファイルをもらってくる,
3. Cabal-syntax パッケージを使ってその .cabal ファイルをパースしてライセンス情報を取る
みたいな手段を取りました.この1.に関して質問させてください.

ここでやりたいことは,「ビルドやインストールはしなくていいけど,現環境から見た,既ビルドのものも含めた全transitive dependenciesのリストが欲しい」ということになります.このために今回は結構乱暴な手段を取りました.Docker環境があったので,まっさらなGHC+Cabalをghcupでインストールしたのち,対象のパッケージ群を全部 cabal install --lib して ghc-pkg list でインストールされている全パッケージのリストを取ってきたのです.しかし,これでは余計なパッケージまで見ている気がしますし,もうちょっとなんとかならんのか,という気がします.

色々いじっていると,適当に一個だけcabal packageを持つcabal projectを作り,Cabal packageの .cabal ファイルは目的とするパッケージ群をdependenciesに持つ library だけを持つようにし,project の cabal.project にはそれらのライブラリについて設定すべきフラグを持たせるようにすると, cabal freezecabal.project.freeze がなんかそれっぽいファイルになるのですが,これで合ってるのでしょうか…? cabal freeze が良い方法なのか,あるいは別の方法があればお教えいただければありがたいです.
... Replies ...
RIOパッケージをbase代替として取り入れています。
RIO.Utf8Builder の値を ロギング用途ではなく 標準出力に吐き出すには何を用いるのが良いのでしょうか?
具体的にやりたいこととしては、情報を標準出力に出力するCLIツールを作ろうとしています。
今はとりあえずTextやByteStringに変換した後に putStrLn 等で出力をしているのですが、他により良い方法があったりしますか?

【現状の方法だった場合: ByteStringにするべきかTextにするべきか】
Text or ByteStringへの変換をする場合、どちらの方が良いとかあるでしょうか?それともあまり考えなくて良いのでしょうか
最初は`textDisplay` が用意されていることから、Textを使うべきなのかな?と思っていました。
しかし、`RIO.Utf8Builder`が内部的には Data.ByteString.Builder.Builder を用いているようなのでByteStringの方が良いのかな?とも考えて悩んでいます。
... Replies ...
@mocamocaland has joined the channel
@h r has joined the channel
GHCの管理が phabricator から gitlab になり、例えば
https://phabricator.haskell.org/D4884
のようなリンクが追えないのですが、gitlabへはどう変換されているのでしょうか?
... Replies ...
代替Preludeを使いたいと考えているのですが、新しくてまとまっている比較記事などはありますか?
... Replies ...
GHC 9からTemplate Haskellでinstanceを定義する時に相互参照が出来なくなってコンパイルが通らなくなったという問題を抱えているのですが、この破壊的変更がどこかにまとまってる場所や、より良い回避方法を知っている方は居ますか?
具体的にどういうことが起きているのかは自分のサイトに書きました。
GHC 9からTemplate Haskellでinstanceを定義する時に相互参照が出来なくなった - ncaq
... Replies ...
言語拡張 CPP を指定したソースコードの確認のために、CPPの処理だけが済んだ段階のソースコードを出力したいと思うのですが、ghc オプション指定でできないものでしょうか?
... Replies ...
@Greg Fragin has joined the channel
ふと思ったのですが,GHCの compiler backend (LLVMとかNCGとか)って機械語吐くのに必要なんだから,ライブラリだけビルドする時って無関係,なんでしたっけ…? こういう時どういう資料を漁ればいいかよくわからなくなってしまって.
... Replies ...
@フラワー has joined the channel
あるpackage の executable 中に入っている module の関数が欲しくて、copy-and-paste するつもりなのですが、こういう時って LICENSE ファイルを複数作るか、追記するか、どうするのが普通なんでしょう?
... Replies ...
@ has joined the channel
@kudos3939 has joined the channel
@西澤秀樹 has joined the channel
@Hisawo TAKASE has joined the channel
https://haskell-jp.slack.com/archives/CL3AXB1AL/p1680155886899719 の関係で strict-wrapper のコード () を読んでたんですが,ここの strictunstrict 関数が怖いことをしていると思うので,皆様のご意見を伺いたいです.参照先のコードは大体

data SPair a b = SPair !a !b

strict :: (a, b) -> SPair a b
strict x = case x of
  (!_, !_) -> unsafeCoerce x

unstrict :: SPair a b -> (a, b)
unstrict = unsafeCoerce

のようなことをしており,これって SPair a b(a, b) の runtime representation が完全に一致しているということを主張している気がするんですが,そんな保証ってありましたっけ…?
... Replies ...