Polyfunctionでpartially applied typeを改善する
scala3で登場したpolyfunctionを用いてscala2系で実現されていたpartially applied typeを改善する。
Match Type
dottyの型システムに現れた強力な機能の一つにMatch Typeがある。
これによって2系のscalaだと信じられないくらい複雑なコードが必要だったものが簡潔になる。
コンパイル時オペレーション
dottyでは型に対してコンパイル時に行える操作が色々増えている。
特にリテラル型に当たるものは値レベルの操作と遜色無いものが用意されている。
コンパイル時オペレーションの中でもscala.compiletime.ops以下に当たるパッケージを見ていこう。
リテラル型(literal type)
scala3にはリテラル型がある。
実はだいぶ前からすでに存在していたのだが、そのサポートがより一層厚くなった。
リテラル型はTypeScriptによって広く一般に知れ渡り、その有用性が実証された。
例えばリテラル型を使用することでTypeScriptではSQLの出力にクエリから型を自動で付けたりできる。
ScalaでAuxパターンをするときにはimplicitの順番に気をつけよう
shapelessとかを使って型レベルプログラミングしてるとAuxパターンを使ってメソッドの型シグネチャで計算を表現することになる。
しかしこれが結構曲者でscalaのコンパイラの残念さもあり結構大変である。
その際に起こるコンパイルエラーの一つにimplicitの順番が関わるものがあるので紹介したい。
Googleがinterfaceを好む理由
Googleはinterfaceが好き
style guideにそう書いてある。
https://google.github.io/styleguide/tsguide.html#interfaces-vs-type-aliases
理由はinterfaceが好まれるテクニカルな理由があるとのこと。
参照に挙げられていた記事を読んでみよう。
代数的データ型Deep Dive in Scala
関数型やってるとよく聞く代数的データ型(ADT)について。
Scalaやってるとよく使うがHaskellほどこの話題について掘った記事はあんまりないのでdigっていきたい。