fp-tsとSemigroup
TypeScriptの関数型ライブラリのfp-tsには型クラスとしてSemigroupがいる。
その紹介。
TypeScriptと型クラス
HaskellやScalaなどの関数型言語の特徴として型クラスというものがある。
これは関数型における強力な道具の一つであり、そして何もHaskellやScalaなどの特権機構ではない。
サポートの大小はあれど他の言語でも実現できる。
そして最近ではRustやGoが型クラスに似たような思想のセマンティクスを採用していることからもわかるように非常に便利である。
この記事では型クラスの概念を理解し、それをTypeScriptで(最低限)どの様に実現することができるか説明する。
型レベル多項式の微分
以前書いた型レベル多項式をベースに型レベルに多項式の微分を実装する。
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の出力にクエリから型を自動で付けたりできる。





