haskell-jp / random #102

@ai-ou has joined the channel
Reminder: [定期] 現在の主要なチャンネルは :point_down: のとおりです。 - questions : Haskellについてのお悩み相談 :thought_balloon: はこちら - beginners : 初心者 :beginner: 向けのより安心・より気軽なQ&A用チャンネル - random : 見つけたHaskellに関する情報、アナウンス、その他何でも :ok: - english-help : 英語 :uk: で困ったときの駆け込み寺 - event-announcement : :tada: Haskellに関するイベントを開催するときはこちらにリンクを張ってください - その他のChannelは「Channels」の右にある :heavy_plus_sign: ボタン -> 「Browse channels」から探してみましょう!
今週のHaskell Weeklyから。GHC 9.6.x Migration Guide
https://gitlab.haskell.org/ghc/ghc/-/wikis/migration/9.6
Core Libraries Committee ってのができて CLC proposal 何番っていうふうに管理されるようになったんですね
(GHC 9.6 移行案内を見てた
https://github.com/haskell/core-libraries-committee
ghc 9.2.6 がリリースされています:haskell:
(問題なければ、これがghc 9.2系の最終になる予定とのこと)
https://discourse.haskell.org/t/ghc-9-2-6-is-now-available/5782
Hiromi ISHII / mr_konn
今週末くらいから、GitHub Action の Ubuntu shared runner 内で haskell/actions/setup が動かなくなっています(参考リンク, 2, 3)。runner 用イメージ内での ghcup のパーミッションの設定が問題のようで、ghcup の作者の方が修正に向けて動きだしています。コンテナ内でアクションを実行している場合は問題なく動くようです(setup アクションがサポートしている環境であれば、の話)。
一、二週間程度かかるかもしれないとのことで、それまでの間は https://github.com/haskell/actions/issues/187 で紹介されているように、setup 前に以下のようなコマンドを追加しておけば当座は動くようです:

    steps:
      ...
      - name: Workaround runner image issue
        if: ${{ runner.os == 'Linux' }}
        # 
        run: sudo chown -R "${USER}" /usr/local/.ghcup
      - uses: haskell/actions/setup@v2
        with:
          ghc-version: 9.0.2
@mocamocaland has joined the channel
baseパッケージだけで PATH 環境変数に入ったパスを分割する、横着なワンライナーを考えました
mapM_ print . filter (/= ";") . groupBy (\a b -> a /= ';' && b /= ';') =<< getEnv "PATH"

Windows上でやったので PATH の区切りがセミコロンになっている点に注意
... Replies ...
@h r has joined the channel
Hiromi ISHII / mr_konn
DeepFlow 社内で開発して2年ほど使っていた、Haskell 製巨大モノレポの依存関係チェックツール guardian を OSS 化したので宣伝させてください。

https://github.com/deepflowinc/guardian

大量のパッケージから成るモノレポで開発を進めていると、不用意にパッケージ間の依存関係を増やした結果不必要にビルドに時間がかかってしまい、ちょっとした変更でもビルドに時間がかかってイテレーションが阻害される、という事がしばしばあります。
guardian はパッケージを複数のグループ(ドメイン)に分けて、予め指定されたグループ間の依存関係以外を発見すると警告してくれる、というツールです。stackベースと cabal-install ベースのプロジェクトに対応しています。
CI で手軽に呼ぶためのビルド済バイナリや、GitHub Action も用意しています。

詳細は以下の記事で紹介させて頂いておりますので、巨大 Haskell モノレポの依存関係の管理にお悩みの方のお役に立てれば幸いです:pray:

https://zenn.dev/deepflow_tech/articles/secure-haskell-monorepo-deps-with-guardian
... Replies ...
atomicModifyIORef' についてまとめました。
https://kazu-yamamoto.hatenablog.jp/entry/2023/02/19/110709
そういえば共有したつもりで忘れてました。ブラウザー上でHaskellを試す公式のplaygroundができたそうです。
https://discourse.haskell.org/t/haskell-playground-is-live-at-play-haskell-org/5869
https://play.haskell.org/
pandocをcabalなんかでインストールしても、pandocコマンドはインストールされなくなり、はまりました。
コマンドはpandoc-cliという別パッケージになっています。
残念ながら9.2.6では最終にならずに、9.2.7が出てしまってますね,,, :haskell:
https://discourse.haskell.org/t/ghc-9-2-7-is-now-available/5883
@Greg Fragin has joined the channel
@フラワー has joined the channel
GHC 9.6のJavaScript backendを環境を汚さずに試したかったのでDockerfileを書いてみました。WebAssembly版も書いていますが、色々問題にぶち当たっています。ホストがAArch64じゃなくてx86_64なら問題ないのかもしれません。 https://github.com/minoki/ghc-docker
... Replies ...
なんか変なGHCのバグ踏んで面白かったので報告します.多分 https://gitlab.haskell.org/ghc/ghc/-/issues/12091 関係なんですけど,このissueってresolvedでcloseされてるんですよね:

$ mkdir ghcbugtest
$ cd ghcbugtest
$ echo "main = return () :: IO ()" > Test.hs
$ ghci-9.2.7 -fobject-code Test.hs
GHCi, version 9.2.7:   :? for help
[1 of 1] Compiling Main             ( Test.hs, Test.o )
Ok, one module loaded.
ghci> :{
ghci| f :: a -> a
ghci| f = id
ghci| :}
ghci> f

<interactive>:5:1: error: Variable not in scope: f
ghci> f :: a -> a; f = id
ghci> f

<interactive>:2:1: error: Variable not in scope: f
ghci> f = id :: a -> a
ghci> f

<interactive>:2:1: error:
    • No instance for (Show (a0 -> a0)) arising from a use of 'print'
        (maybe you haven't applied a function to enough arguments?)
    • In a stmt of an interactive GHCi command: print it
... Replies ...
とりあえず報告してきました: https://gitlab.haskell.org/ghc/ghc/-/issues/23107
ざっくりですが書きました / GHC 9.6の新機能 https://zenn.dev/mod_poppo/articles/whats-new-in-ghc-9-6
wasm32-wasi用のGHCをビルドするDockerfileも書けました。GHCをビルドする際のバグを回避するためにパッチを当てたりしています。途中でGHCだけでなくLLVMのビルドも走りますが、新しい物好きの人は試してみる価値があると思います。
@ has joined the channel
Setup.hs の HLS 対応はまだなのでこういうワークアラウンドが必要なんですね https://github.com/haskell/haskell-ide-engine/issues/1650#issuecomment-650192055
cabal が v2 コマンドになってから、ビルドのパスが分からないので doctest が失敗するようになってしまった問題についてです。
現在では cabal repl で動かすようになったんですね。

https://github.com/sol/doctest#running-doctest-for-a-cabal-package

.cabalファイルに doctest の項目は不要になりました
• test/doctest.hs も不要になりました
• CI では、cabal test に加えて cabal repl を追加します
@kudos3939 has joined the channel
相互再帰ってfixで書けるんですね.Lazy pattern matchingがミソでした.
even1, odd1 :: Int -> Bool
(even1, odd1) = fix $ \ ~(e, o) ->
  let f n = if n == 0 then True else o $ pred n
      g n = if n == 0 then False else e $ pred n
  in (f, g)

even2, odd2 :: Int -> Bool
(even2, odd2) = fix $ \ ~(e, o) -> (f o, g e)
 where
  f o n = if n == 0 then True else o $ pred n
  g e n = if n == 0 then False else e $ pred n
@西澤秀樹 has joined the channel
GeneralizedNewtypeDeriving, Strict, StrictData をオンにしておいて
newtype Foo = Foo Int deriving (Storable)

と定義すると、sizeOf は引数に対して lazy になります。
Strictが効かない。
そういうものですかね?
@Hisawo TAKASE has joined the channel
Masaya(M_simplifier)
最近Idrisにハマっちゃってる人です。そこで、Haskellerのみなさんにお聞きしてみたいんですが、みなさんはIdrisについてどう思います?型システムについてでも、あるいはML系の構文をしてる1プログラミング言語としてでも。(関数型ファンな人やプロフェッショナルな方々の視点や感想を聞いてみたくて)(Haskell以外の言語の話題はご迷惑でしたらすみません……)
... Replies ...
Masaya(M_simplifier)
そういえば、Haskellにとどまらない、関数型言語や型理論、数学(基礎論)よりのCSとかこれ系全般の(日本の)コミュニティってありますかね?(今、Idrisでグラフィック触れるライブラリいい感じのを知ってる人どこかにいないかなとか考えてて)(Haskellのコミュニティなのにこういう話ばっかりしてすみません)
... Replies ...
ぶったまげたんですけど, GHCに Git submodule として入ってる hpc というpackage () が,GHC
= 9.6.1 において本当に Git submodule () として指されているだけの detached commit になってました.もちろん「`hpc` 本家」の Git repository は存在 () します.しかし,当該 Git submodule は hpc 本家のなんのブランチにも多分属してないし,hackage上でリリースもされていない上に,`.cabal` ファイル上の バージョン番号が Hackage上でリリース済みの 0.6.2.0 と一致してます. GHC をダウンロードしてついてきたhpc-0.6.2.0と同じ名前 “hpc”,同じバージョン “0.6.2.0" のパッケージを Hackage から落としてくると中身が違う,ということです.その上,GHC-9.6.1 についてきたhpc-0.6.2.0は, filepath-1.4.100.1 + directory-1.7.8.0 (GHC-9.6.1についてくるバージョンです)とビルドできるけど,Hackageから落としてきたhpc-0.6.2.0は dependency constraint から外れてもいないのにこれらの filepath + directory とビルドできないので,本気でぶったまげました.
この本、毎日ちょっとずつ読んで先日ようやく読み終えました。
基本的にコンパイラー全般の話ではあるんですけど、後半の方でHaskellのようなlazyな言語をどう効率のよいC言語にコンパイルするか、みたいなことが書かれていて面白かったです。
https://link.springer.com/book/10.1007/978-1-4614-4699-6
こちらの回答を書く際 pointfree.io が教えてくれた flip id ってなんだろう、と思ったら、どうやら引数と関数を受け取って引数を関数に渡した結果を返す、言わば前置記法みたいな変換をしてくれるんですね。
> :t flip id
flip id :: b -> (b -> c) -> c
> :t flip id "a"
flip id "a" :: (String -> c) -> c
> :t flip id "a" (++ "b")
flip id "a" (++ "b") :: [Char]
> flip id "a" (++ "b")
"ab"
-- flip f x といえば (`f` x) にも置き換えられるので、
-- ↓ももちろんOK。冷静に考えたら当たりまえだけど面白い。
> (`id` "a") (++ "b")
"ab"

https://haskell-jp.slack.com/archives/CR2TETE5R/p1681353753081089?thread_ts=1681353081.736949&cid=CR2TETE5R
id($) の代わりができるというのをどこかで読みました。`($) :: (a -> b) -> (a -> b)` は id を特殊化した型になってますし、 id f x = (id f) x = f x になるので。`flip id` は flip ($) と置き換え可能で、機能的には同じだと思うんですけど、 では文字数が少ないから id を使うんでしょうか :thinking_face:
... Replies ...
@光志賀 has joined the channel
@ has joined the channel
@Keonhwa Ryu has joined the channel
@maken has left the channel
haskell-actions Github オーガナイゼーションができてて Haskell 系ツールの Github Actions が集まってた
fourmolu/fourmolu-action は haskell-actions/run-fourmolu にリダイレクトされた
https://twitter.com/kakkun61/status/1649284850069946375
朝日ネット 技術者ブログでAlgorithm Design with Haskellを紹介した記事が公開されました。
https://techblog.asahi-net.co.jp/entry/2023/04/21/121954
@ has joined the channel
:earth_asia: GHCのWasmバックエンドがGHCのtestsuiteを全部通ったそうです :tada:
https://twitter.com/tweagio/status/1650493783224532994
@EtoAl has joined the channel
@Archgen has joined the channel
@tedzuka has joined the channel
例外発生時にバックトレースを加えるproposalについて、改めてフィードバック募集
https://twitter.com/bgamari/status/1655679570467598338
fix1 :: ((b -> c) -> b -> c) -> b -> c
fix1 = fix
fix :: (a -> a) -> a
fix f = flip fix1 f $ \g h -> h $ g f

fix1と`fix`は上記の通りどちらを先に定義しても良く,ほぼ等価.手続き型にコンパイルすることを考えると,関数から値を生成しなくてはならない`fix`より,関数から関数を生成すればよい`fix1`の方がプリミティブとして適している?`flip fix1`の形がループっぽくなるのは知られているが,手続き型のループの役割を`fix1`が担うとも考えられる.
@bbmallow has joined the channel