https://haskell.jp/blog/posts/2020/strict-gotchas.html
strictは!をつけてくれるのですが、!のseqではなくdeepseqに置き換えたい場合はどうすればいいでしょうか。
strictは!をつけてくれるのですが、!のseqではなくdeepseqに置き換えたい場合はどうすればいいでしょうか。
Control.DeepSeq.force の組み合わせですかね! をつけて回る」はそんなに害がないことが多いですが、「全ての関数のすべての引数 x を !(force -> x) に置き換える」はパフォーマンスにおいて基本的に有害なのでやめた方が良いかと思います。 deepseq は、一度既に deepseq 済みのデータ構造であっても、データ構造全体をトラバースして評価済みであることを確認・保証するという動作をするので、一度されればもうコストがかからない seq と違って、いつも何度でもデータ構造自体のサイズに比例した時間がかかります。let (p,q) =
let !(p,q) =
! 」を避けようとすると型でセーフガードをつける方に行っちゃうので…。