Reddit で振り返る今年の英語圏 Haskell 界隈の話題

[Haskel advent calendar 2023](https://qiita.com/advent-calendar/2023/haskell) の1日めの記事です．

お仕事も情報系でなく，多忙を言い訳に数年ほとんどコード自体をかけていなかったのですが，最近 [e-Gov 法令検索](https://elaws.e-gov.go.jp/) で公開されている法令XMLを読みたい需要があって久しぶりに Haskell で書いてみたらやはり書きやすく，とても楽しくて改めて感動しました．書きながら自然に思考が整理される感じがよい．
[Hoogle](https://hoogle.haskell.org/) は変わらぬ使いやすさでモリモリサポートしてくれるし，環境構築も GHCup などが噛み合って随分スムーズで，Haskell Language Server も成熟してきているようです．環境構築については，昨年の Advent Calendar の1日め [@mod_poppo さんの記事](https://zenn.dev/mod_poppo/articles/haskell-setup-2023) などが参考になります．

最近入った言語拡張にも，ちょっとだけコード書く位でも（大規模なあるいは高度なコードじゃなくても）恩恵が大きいのもあり，たとえば GHC-9.2 から入った  [`OverloadedRecordDot`](https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/overloaded_record_dot.html) [^a-ghc9.2]は，これがないとできない何かがあるわけではないけれど書きやすさに大きく貢献して気持ちいいです．

本題に戻って，この記事では，Reddit の [r/haskell](http://reddit.com/r/haskell)の過去一年の人気記事( [r/haskell/top/?t=year](https://www.reddit.com/r/haskell/top/?t=year)) を順に見て，この1年の話題を振り返ってみます．とりあえず12月にちなんで上位12, 加えて興味を惹いたものをいくつかピックアップしました．目次だけでも眺めていってくれたらうれしいです．ちなみに Reddit には日本語コミュニティ [r/haskell_jp](https://www.reddit.com/r/haskell_jp/) もあります！

## 本題

### 1. 書籍 "Production Haskell" が完成！
["Production Haskell" is complete!](https://www.reddit.com/r/haskell/comments/10ry9qi) (330 upvotes[^upvotes])

> The book is a 500+ page distillation of my experience working with Haskell in industry. I believe it's the best resource available for building and scaling the use of Haskell in business.

2月発売．Amaozon (ソフトカバー，ハードカバー（は多分今品切れ），Kindle 5000円），及び learnpub (https://leanpub.com/production-haskell) で販売中．後者はわかりにくいですが "Read Free Sample" というところからサンプルが読めます（一瞬びっくりしたがサンプルの目次はサンプル用に作り直されていて，本文は23章まであり，目次は learnpub のページの下の方にある）．

About the Book を読むと，（論文読むのさえ厭わなければ）Haskell の上級レベルの部分については良質な学習素材がたくさんあり，入門書も最近良いのがいくつも出たが，production で Haskell を使うことに関する情報は少なく，ここを埋める教材，とのこと．Haskell を勉強した，monad について友人にも広めた，入門書を読んで，オープンソースのなにかで遊んだ．じゃあもっと本格的に使いたい！　コンピュータの前に座って，さあどうしよう，と思案するときに，とも書かれています．扱う範囲はチームの作り方からコンパイル，設計，コードのことまで幅広く， [レビュー記事](https://dev.to/zelenya/book-review-production-haskell-17nm) や amazon のレビューは評判よさそう．

### 2. Javascript バックエンドが GHC にマージ！
[JavaScript backend merged into GHC | IOG Engineering](https://www.reddit.com/r/haskell/comments/zlrk40/), links to: https://engineering.iog.io/2022-12-13-ghc-js-backend-merged/　 (200 upvotes)

GHCJS がマージされた状況に近いが，いまのところは並行（GHC 側にはまだ Template Haskell など重要な機能が開発中で，一方 GHCJS は GHC8.10.x より新しいバージョンはサポートしなさそう）する様子．今のところは普段使う ghc がそのまま js へのコンパイルもできるようになるわけではなく，別途それ用の GHC を用意する形になるようです．また，同じタイミングで wasm バックエンドもマージされています．

和文献として参考：
- GHC 9.6の新機能 - https://zenn.dev/mod_poppo/articles/whats-new-in-ghc-9-6 
- Glasgow Haskell Compiler の WebAssembly バックエンドを一足早く動かしてみる (Haskell Advent Calendar 2022, 19日目) https://qiita.com/tnagao7/items/09a4e18d23d5608573e9

### 3. play.haskell.org で Haskell Playground が利用可能に
[The Haskell Playground is now available at play.haskell.org](https://www.reddit.com/r/haskell/comments/11awnuc), links to: https://play.haskell.org/ (170 upvotes)

コードをブラウザ上から試せるやつ．色々なパッケージも使えるようです（使えるやつを一覧表示したいという [issue](https://github.com/haskell/play-haskell/blob/master/play-haskell-worker/bwrap-files/mkbuildscript.sh#L65-L88), 多分現時点では[これ](https://github.com/haskell/play-haskell/blob/9e84ae5f28ee5a2be03185df79f887dfd7e8547a/play-haskell-worker/bwrap-files/mkbuildscript.sh#L65-L87)）．

### 4. 確定申告を先延ばしにしているカナダの Haskeller へ
[For Canadian Haskellers procrastinating their tax returns](https://www.reddit.com/r/haskell/comments/12i3oy2/), links to: https://hackage.haskell.org/package/canadian-income-tax (170 upvotes)

カナダの確定申告用のフォームで自動計算できるところを自動で埋めてくれるパッケージ．ニッチさと利便性とネタ感の絶妙なバランスがよいですね．利用法は [Github](https://github.com/blamario/canadian-income-tax) のほうに詳しく，最終的にはpdftk を使ってフォームを埋める感じになっているようです．パッケージの名前空間 `Tax.Canada` が個人的にツボ．

### 5. "Learn Haskell by building a blog generator"  が良かった
["Learn Haskell by building a blog generator" is a great resource for learning](https://www.reddit.com/r/haskell/comments/10jdha0/) (170 upvotes)

Learn Haskell by building a blog generator という教材（上のポストでは https://lhbg-book.link/, 今 https://learn-haskell.blog/ にリダイレクト）がめちゃくちゃ良かったという話．下に出てきますが Haskell.org の getting started でも紹介されている教材です．

senior web developer で [learn you a haskell](learnyouahaskell.com) （[すごいH本](https://www.ohmsha.co.jp/book/9784274068850/)）で随分前に入門したことはある，という人が毎日数時間で一週間くらいでこなしたレビュー．HTMLベタ書きでもいいから動くものから始まり，徐々に型安全で haskell らしい書き方に移るのも良いし，基礎的なことと応用的なことのバランスがよく，全体として経験のある Haskeller と一緒に仕事したあとみたいな感じ，と絶賛しています．結局この人は Warp でフルタイムで Haskell を書くことになったらしい．

### 6. ChatGPT にエドガー・アラン・ポーの文体で Haskell について教えてと頼んだらすごかった
[Asked ChatGPT to explain Haskell to me in the style of Edgar Allan Poe, and the answer was beautiful.](https://www.reddit.com/r/haskell/comments/1033vpe/) (140 upvotes)

韻はちゃんと踏んでいて，かつ Haskell っぽさもしっかりあって面白い結果に．コメント欄に詩文勢のちょっとした考察があったりします．

### 7. Haskell.org に "Get Started" のページができた！
[Haskell.org now has "Get Started" page!](https://www.reddit.com/r/haskell/comments/10qvdce/) (140 upvotes)

haskell.org の一番上から飛べるようになっていて (https://www.haskell.org/get-started/) ，指示に従えばとりあえずコードを書く準備ができるようになっています ．2023年11月時点ではそこからリンクされてる教材は [Pennsylvania&nbsp;大学の教材](https://www.seas.upenn.edu/~cis1940/spring13/lectures.html), [Learn You a Haskell](http://learnyouahaskell.com/), 上にも出てきた [Learn Haskell by building a blog generator](https://learn-haskell.blog/).

初心者向けの資料は元々 [HaskellWiki](https://wiki.haskell.org/Haskell) などしっかり整備されていたと思いますが，環境構築とかで悩まなくてすむよう，トップページから最速で試せるルートへ導線があるのはよいですね．

### 8. Steam 販売中のアクションゲームのソースコード
[Defect Process full haskell source (~62k LOC | action game on Steam)](https://www.reddit.com/r/haskell/comments/z98ubk/) Links to: https://github.com/incoherentsoftware/defect-process (130 upvotes)

2Dハクスラのソースコード部分（アセットとかがなくてゲーム自体ではない）を公開．描画とかはsdl2でやってるみたい ([pacakge.yaml](https://github.com/incoherentsoftware/defect-process/blob/main/package.yaml)).

Haskell 製で販売されてるゲームとして思い出すのは [てらし鬼](https://store.steampowered.com/app/591640/) もあります．

### 9. GHC 9.6.1 リリース
[[ANNOUNCE] GHC 9.6.1 is now available](https://www.reddit.com/r/haskell/comments/11p2a7h/) / links to: https://discourse.haskell.org/t/ghc-9-6-1-is-now-available/5972 (130 upvotes)

GHC のリリースはそれぞれ投稿されますが，9.6.1 は上の javascript や wasm のバックエンドのマージの関係もあって割と注目を集めたよう．

### 10. r/haskell と Reddit について
[r/haskell, and the recent news regarding Reddit](https://www.reddit.com/r/haskell/comments/146d3jz/) (120 upvotes)
3rd party のアプリケーションへの処遇などで一時 reddit とコミュニティ全体が揉めており，それに関するやつなので，あまり Haskell 自体とは関係ありません．

### 11. 38時間前にHaskellを知ったのだが多分すごく好きだ，助けてくれ
[help i just discovered haskell 38 hours ago and i think i love it](https://www.reddit.com/r/haskell/comments/12j8omv/) (120 upvotes)
Biggest nerd になるのを競う変なゲームみたいだぜ，と．入門者ようこそスレッドということでひとつ．

### 12. Haskell の lead developer Simon Peyton Jones のインタビューとAMA
[Interview and AMA with Simon Peyton Jones, lead developer of Haskell](https://www.reddit.com/r/haskell/comments/12jluk5/) (120 upvotes)

GHC の lead developer で非正格(lazy)関数型言語の研究で著名な Simon Peyton Jones ([wikipedia](https://en.wikipedia.org/wiki/Simon_Peyton_Jones)) のインタビュー．[Youtube の livestream](https://youtube.com/live/fBFsxmJEk7M) で公開されています．

-----------------
（ここからは上から順に見て目についたもの）

### 書籍"Effective Haskell" がβ版を卒業，紙でも販売！
[Effective Haskell is out of beta, and now available in print.](https://www.reddit.com/r/haskell/comments/15h7a4m/) Links to: https://effective-haskell.com/ (110 upvotes)

8月発売．Amazon で 8000円くらい，紙の他 DRM-free な PDF, ePub, Mobi などでも販売．

目次をみると最初の入門からリスト，型，型クラス，IO, モナドなど通って型クラスのことなどに至る標準的な流れのようで，かつ *effective* と名乗るように実用への配慮も見えるように思う．less とか bat みたいな HCat, ファイルの圧縮/展開をする Filepack, スペルチェックをする Spellcheck（データ構造や効率化をここで学ぶらしい），シェルスクリプトを書くための domain specific language ShellCommand の [4つのプロジェクト](https://effective-haskell.com/projects/projects.html) を通じて学ぶ構成になっています．

### "The Haskell Unfolder" youtubeシリーズが開始
[Announcing new YouTube series: "The Haskell Unfolder"](https://www.reddit.com/r/haskell/comments/12jhlpg/) links to: https://well-typed.com/blog/2023/04/announcing-the-haskell-unfolder/ (100 upvotes)

[Well-typed](https://well-typed.com/) 勤務の2人の Haskeller による youtube シリーズ [The Haskell Unfolder](https://www.youtube.com/playlist?list=PLD8gywOEY4HaG5VSrKVnHxCptlJv2GAn7) の開始のアナウンス．unfold-er （開く，明らかにする，解きほぐす，みたいな）と unfoldr をかけたネーミングですね．隔週くらいのペースで，もちろん[第一回](https://www.youtube.com/watch?v=S_HSt6jEtWM&list=PLD8gywOEY4HaG5VSrKVnHxCptlJv2GAn7&index=1)は `unfoldr` ．この記事書いてる今最新のエピソードは 11月23日の[Episode 15: interruptible operations](https://www.youtube.com/watch?v=VpYC-uixrEQ&list=PLD8gywOEY4HaG5VSrKVnHxCptlJv2GAn7&index=16) です. 回ごとに一人が主に話す役，一人が質問挟んだりする役，という形で交代で担当しているっぽい．
とりあえず第一話見てみましたが，コードを書きながら話が進んでわかりやすく，かなり良い感じでした．扱うジャンルも色々で勉強になりそう．

### Haskell in Production: Meta
[Haskell in Production: Meta](https://www.reddit.com/r/haskell/comments/12dnfns/) Links to : https://serokell.io/blog/haskell-in-production-meta (100 upvotes)

[Haskell in Production](https://serokell.io/blog/haskell-in-production) というブログ連載の Meta 回で，以前 GHC の開発者の一人で今はMetaにおられるSimon Marlow へのインタビュー．スパムと戦う Sigma　(cf. [2015年のブログ記事](https://engineering.fb.com/2015/06/26/security/fighting-spam-with-haskell/)) を皮切りに，そこから [Haxl](https://github.com/facebook/Haxl) や [Glean](https://glean.software/) が派生したらしい．業務で使うメリット，デメリット，勘所など．

<!--
### 静的に取れる情報を使い機能をぐっと絞ってメモリ消費を小さくした language server
[Static-ls - a low memory Haskell language server based on hiedb and hiefiles](https://www.reddit.com/r/haskell/comments/12fsigf/) (110 upvotes)

個人プロジェクトの [Static-ls](https://github.com/josephsumabat/static-ls) の紹介．その後アクティブに開発がされているわけではなさそう．

コードベースが大きすぎる，あるいはマシン性能が不十分で HLS は使えない場合に．静的に生成された情報を使って type on hover （型情報），find references （呼び出し元），go-to definition （定義元へジャンプ）の機能を提供する language server. hiedb でできる範囲の補完・ドキュメンテーションの取得・ghcid のdiagnostics は今後実装したい…とされている（た）．
-->


## まとめと感想

- コード書くの自体久しぶりだけどやっぱり Haskell 書きやすいし楽しいぜ，最近のニュースを追っかけたいな……というのが元のモチベーション
- 良さげな書籍/教材情報などもあって思ったより収穫があった
    - [Production Haskell](https://leanpub.com/production-haskell)
    - [Learn Haskell by building a blog generator](https://learn-haskell.blog/)
    - [Effective Haskell](https://effective-haskell.com/)
    - [Pennsylvania 大学の教材](https://www.seas.upenn.edu/~cis1940/spring13/lectures.html)
    - [The Haskell Unfolder](https://www.youtube.com/playlist?list=PLD8gywOEY4HaG5VSrKVnHxCptlJv2GAn7) シリーズ
- 日本語で紙の本は直近であまり出てない ([honto.jp](https://honto.jp/netstore/search_0730_0219009000000_09-saledate_10Haskell.html?ebfl=0&tbty=1))ようだが，[技術書典](https://techbookfest.org/) とかでは関連書籍が出ていたりする．あちらでもこちらでも色んな有用な資料が出ているから，広く注目を集められるといいなと思いました（小学生並みの感想）．それぞれの向きの翻訳とかもちょっとは需要ありそうですけれどね．
- GHCの更新（言語拡張とか）はこの記事ではあまり拾っていません．
- 含めなかったけど，定期的に求人とかインターンの情報もポストされていたりします．
- ツール周りでは GHCup, HLS, fourmolu (フォーマッタ), あたりが耳目を集めている
- ニュースバリューとか言語にとっての重要性とかと top に出てきやすさは必ずしも合致しない．そういう調査ではない（Reddit での upvote はわりと「ナイス！」みたいな気持ちとか応援で押されるので，こういうの作ってみたから見てみてよ，的なポストは多分やや upvote されやすいような気がする）
- ガチ勢じゃなくても Haskell は十分楽しめるのでまだの人は気軽に入門し，最近書いてない人は（環境構築も随分スムーズになったので）また書いてみて，書いている人は引き続き楽しんでほしい．12月は [advent of code](https://adventofcode.com/) もはじまるので，Haskell に限らず普段触らない言語を触るのに丁度いいのではないでしょうか．





[^a-ghc9.2]: これも mod_poppo さんの記事 https://zenn.dev/mod_poppo/articles/ghc-9-2-and-future とかがわかりやすい
[^upvotes]: Reddit は仕様で正確な upvotes 数を表示しないので，適当に丸めています．以下同じ．