Scala 3のmatch typeで数独チェッカーを作った

なんかtweet流れてきたので

github.com

  • Scala 3のmatch type自体の詳細な説明は省略しますが、compile時計算的なことができて、チューリング完全です https://tarao.hatenablog.com/entry/lambda-scala3
  • あくまで答えがvalidか?のcheckerだけで、プレースホルダー部分実装してない
    • それも実装しました。下記に貼った
  • 少なくともIntelliJ IDEAだとリアルタイムにエラー表示はしてくれなかった気がする
    • 誰か他の環境で試してくれ
    • 一応できた。下記に追記したtweet参照
  • 雑にcompile errorにするのか?丁寧にtrueかfalse返すのか?あたりは選択肢があり得る。そのあたりの方針が雑
  • typescriptの実装見ずに1から数十分?で自作したけど、Scalaのmatch type素直に書け過ぎて、慣れてるとそんなに難易度高くないので面白みがない(?)
  • そもそも、あまり調べてないけど、Scalaでの前例は普通にある気がする(?)
  • 細かい部分色々雑なので、もっとリファクタしがいがありそう
  • サンプルの回答の1箇所どれか雑に変えたらcompile errorになることを確認したので、多分あってると思うが、コピペミスとかあったら教えてください
  • 実装にあたっては、ロジック考えるとかより、81個ボイラープレートあるのが辛かった
  • 効率と読みやすさの点でも、どちらを優先するか?どっちも頑張るか?によって、もっと書き方はいくらでもありそう

checkerだけの初期版

gist.github.com

プレースホルダー対応版

gist.github.com