2024-06「キャンプΔ」
キャンプΔ
ツイートまとめ定期
関数型言語の実装: Union Typeの実装
- 社の勉強会で知ったのですが、関数の引数は反変らしいです。
- TypeScript の変性(共変・反変)を 5 分で理解する の例がわかりやすかったです
- 直しました commit
- 今まで
(int) -> intの関数に(any) -> intを代入できてしまっていましたね
- 今まで
// User に Admin を代入できる
type User = { name: string }
// Admin は User の subtype
type Admin = User & { permissions: string[] }
// 関数の返り値は共変
const fn1: () => User = () => admin
// 関数の引数は反変
const fn3: (arg: User) => void = (arg: Admin) => console.log(arg.name, arg.permissions);
- Union Typeを作りました
(let x : (| int atom) 1)みたいに書けます(パーサーの実装が面倒くさいので前置になっています)any <: any | intにならなかったのでanyは例外で絶対にsuper typeになるように直しました- Literal Typeを作り, リテラルはLiteral Typeに推論されるようになりました
1 <: 1 | 2とかが出来ます
- Union Type同士
a,bの部分型かの比較は↓とかになるんですかねa要素型 $\subset$bの要素型 またはbの全ての要素型btについてaの要素型atのsubtypeat <: bt
1 | 3 <: (1 | 2) | 3とかのネストする場合があるのでUnity Typeは型評価時にflattenしないといけなかったです
- Generic Boundsを作っています
((fn (x : (a <: atom)) x) :a)と書くとxはatomのsubtype(:aとか)を受け取れるようになります- 型変数がある時はsubtypeかのチェックはスキップされますが, boundsがあると
arg_ty <: bound_tyがチェックされます- これで良いかはわからない
生活
同期とオートキャンプ場で泊まりました。


- 勝浦担々麺

娯楽
- RAS
モルック
— か (@w4k4.me) Jun 20, 2024 at 15:22
[image or embed]
- 桃香セット
ガルクラの聖地巡礼をしました
— か (@w4k4.me) May 29, 2024 at 12:23
[image or embed]
- Dead Pop Fes 2024
— かまちょ🌖🍀🍢 (@kmch000) June 29, 2024