haskell-jp / random #81

GHC2020 言語拡張の議論が、ghc-steering-committeeで始まっているようです:haskell:
(Haskell 2020規格ではなくて、GHC拡張の集合体です。いずれ広く議論されるかな?)
[ghc-steering-committee] GHC 2020
https://mail.haskell.org/pipermail/ghc-steering-committee/2020-August/001712.html
ghc-proposals Wiki
https://github.com/ghc-proposals/ghc-proposals/wiki/GHC2020

発端は、Rejectとなりましたが、以下のproposalの議論からです。
Enable BangPatterns by default #343
https://github.com/ghc-proposals/ghc-proposals/pull/343
stack build すると何かエラーが サーバーがおかしい?
> stack build
HttpExceptionRequest Request {
  host                 = ""
  port                 = 443
  secure               = True
  requestHeaders       = []
  path                 = "/v1/pull"
  queryString          = ""
  method               = "POST"
  proxy                = Nothing
  rawBody              = False
  redirectCount        = 10
  responseTimeout      = ResponseTimeoutDefault
  requestVersion       = HTTP/1.1
}
 (InternalException (HandshakeFailed Error_EOF))
https://www.stackage.org/ もアクセスに失敗しますね... :confused:
復活してました :relieved:
ExcelにHaskellのコードを埋め込める時代が来てました https://github.com/MarcusRainbow/Haxcel
@小南靖雄 has joined the channel
@nuoun has joined the channel
中身は Haskell Wiki そのままですが、動くプロジェクトとして C から Haskell を呼ぶコードを書いてみた。
https://github.com/kakkun61/c-invokes-haskell
@ has joined the channel
自静的ウェブサイトを Ruby Jekyll から Haskell で shake + lucid + hint にしたら結構満足いくものになった。
https://doujin.kakkun61.com/
キモはこの辺り ↓ で、hint でインタープリターを呼び出しているのでコンテンツの変更で Haskell コードの再ビルドの必要がない(ルールの変更のときだけ再ビルドをする)。
https://github.com/kakkun61/doujin-site/blob/master/app/gen.hs#L64-L79
コンテンツは lucid で記述する。
https://github.com/kakkun61/doujin-site/blob/master/content/index.hs

そのうちブログにまとめます。
古い記事だけど知らなかった。ウケる :laughing: http://fumieval.hatenablog.com/entry/2013/02/22/010432
テンプレートリポジトリーにしました https://github.com/kakkun61/static-site-generator-template
線形型で遊んでみるか
9.0.1-alpha1 Windows 版、8.8.4 みたいにまた絶対パスが入っている?
是非、バグ報告を:pray:
https://gitlab.haskell.org/ghc/ghc/-/issues

今回は本リリースが10月中旬のようで、テスト可能期間が特に短いので:+1:
たぶん、Windows配布版のバイナリに問題があるのかと思います。
エラーをreproduceできるコードの現物を、issueに貼り付けてもらえれば:+1:
ちなみにエラーは、ghcやrunhaskellでも起きますか?
cabal buildの場合のみ? その辺りの情報も混みで提示できると、より助かると思います:sparkles:
GHC 9.0のLinearTypes。 RedditのコメントがGHCのバグを意味してるのかと思ったら、LinearTypesで
多重使用を正しく検出できたということですね。

{-# LANGUAGE LinearTypes #-}

foo :: Int #-> (Int,Int)
foo i = (i,i)

iが2回使われてるので、以下のエラー検出できて、めでたし、ということですね。  結構、記述が軽い。 #->だけ。

$ ghc test.hs
test.hs:5:5: error:
    • Couldn't match type ''Many' with ''One'
        arising from multiplicity of 'i'
    • In an equation for 'foo': foo i = (i, i)
  |
5 | foo i = (i,i)
  |     ^

Docker コンテナー内でもうまく行きますねえ https://gist.github.com/kakkun61/8703f6319359e1ab17dc8768bb604bb4
ローカルでは再現するんだけどなあ
寝ても思いつかなければ Reddit にコメント書いてみます
重複がないかだけ確認してさっさと報告した方がいいと思います。特に急いでいるでしょうし。安定版ならともかく、GHCのalpha版のことなんで開発者の方が特に詳しいでしょうしね。
うーん、さっと試した感じ私の手元でも再現しませんね... ぐぬぬ。
verbose系のオプションを付けた時の実行結果も見たいですね
@gen17 has joined the channel
載せました~
ghc から呼ばれる gcc に verbose 付けたいな
手元のWindows環境でも確認してみましたが、GHCに -optc-v をつけて実行すると ignoring nonexistent directory "D:/msys64/mingw64/include" というメッセージが出てますね。`D:/msys64` が単に存在しないだけならOKで、「メディアの挿入されていない光学ドライブ」だとエラーになる感じですかね。
なるほどー
その旨 GitLab に書いていただければ嬉しいです
USBの外付け光学ドライブじゃ再現しないっぽいですね...
mod_poppoさんの推測と一緒にコメントしておきました。
agehara_hiroshi
@agehara_hiroshi has joined the channel
@mds_boy has joined the channel
GHCのGenericsの Rep を直接操作してフィールドや値コンストラクターを追加・削除できるそうです。すごい。
https://github.com/Lysxia/generic-data-surgery
軽量なデバッグ手法についての記事を書きました http://fumieval.hatenablog.com/entry/2020/10/02/204554
使い勝手はシンプルなのに実用的そうですね!
(ちなみに細かいですが、2つめのコードブロックがtypoみたいです。`test` でなくて`threadDelay` ?)
- *Probe> probe "test" test 1 2
+ *Probe> probe "test" threadDelay 1 2

testDelayの間違いでした。ご指摘ありがとうございます!
Toshinori Takahashi
@Toshinori Takahashi has joined the channel
Haskellを学んでHacktoberfestをクリアしようプロジェクト
https://github.com/kowainik/learn4haskell
問題を解いて自分自身のフォークにPull requestを送れば、レビューをしてくれる。素晴らしいアイディアじゃ。
白雪姫……
指定した式が余計なサンクを持っていないかチェックするパッケージ。 :open_mouth: すごい。すごいけどどういう運用にするのがいいんだろう。productionコードに埋め込んで問題があったら警告ログとか?
https://www.well-typed.com/blog/2020/09/nothunks/
https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/assert.html GHCのアサーションと組み合わせるのがおすすめです。このパッケージではないですが、うちの会社のコードベースでもメモリリークを防ぐためにいくつかアサーションを使っています
対処されたみたい(GCC のバージョンが上がったみたい https://gitlab.haskell.org/ghc/win32-tarballs/-/merge_requests/10