型レベル多項式の微分
以前書いた型レベル多項式をベースに型レベルに多項式の微分を実装する。
https://kazchimo.com/2021/05/19/dotty-typelevel-polynomial/
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の順番が関わるものがあるので紹介したい。
代数的データ型Deep Dive in Scala
関数型やってるとよく聞く代数的データ型(ADT)について。
Scalaやってるとよく使うがHaskellほどこの話題について掘った記事はあんまりないのでdigっていきたい。
Ordersky先生が説明してくれたdottyに入るかもしれないchecked exceptionのモチベ
このドキュメントでordersky先生がscala3に入りそうなchecked exceptionのモチベを説明してくれていて、面白かったので紹介する。
該当のプルリク。
ScalaのF[_]と高カインド型(Higher Kinded Type)を完全に理解していく
Scalaはなんとなく書けるようになったけどライブラリコードとか読めないし、関数型はもっとわかない。
特にF[_]
みたいなやついっぱい出てくるけどなに?みたいな人に捧げる記事です。
このようなものは高カインド型などと呼ばれ、なかなか理解が難しいものです。
型のさらなる抽象化の旅に出ましょう。
これはUnderstanding F[_] in Scalaの日本語訳です。