Haskell じゃなくて、GHC か
Haskell、higher-rank type alias、type family とかいれて、あそこまでの自然な type-level の使用感を出せてるのすごいな (自然な使い方ができるとは言っていない)。type system 設計してると改めて思うわ
このアカウントは、notestockで公開設定になっていません。
人が足りないところ、実は人を受け入れる体制がないのでは?とはちょっと思ってる。人を受け入れる体制がないので、スキルを求めるが、その結果人を探すハードルが高くなってるみたいなのがある気がするな。負のスパイラルって感じだ
人に嫌われる sub-typing と、普段意識しない sub-typing があるんかな?
そういや、sub-typing を嫌う人たちは一定数いるが、sub-typing が入ってない言語ってあまりない気がするな。Haskell も幾つかそういう規則あるし、基本多相型で推論搭載する時点で sub-typing ない方が不便な場合が多い
Haskell で Open Telemetry を利用してオブザーバビリティーを向上させよう - 趣味はデバッグ……
https://kakkun61.hatenablog.com/entry/2023/12/25/Haskell_%E3%81%A7_Open_Telemetry_%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%82%AA%E3%83%96%E3%82%B6%E3%83%BC%E3%83%90%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%83%BC%E3%82%92%E5%90%91%E4%B8%8A
type と type scheme で行き来できるようなもんだしな。それと同じで type とふわふわ type 用意して、ふやふわ type から type にせんと型付けできないところとふわふわ type でも型付けできるとこ用意すればええだけか
よく考えれば System-F の instantiation / generalizing も stage 化みたいなものか
つまりリテラル直書きで使う際は柔軟な推論してくれるが、一回変数とかに当てはめると型が固定化されるみたいなやつ
具体的には、
#let x: (a: Int, b: String) = (1, "str") // ok
#let y = (1, "str")
#let z: (a: Int, b: String) = y // ng, y is inferred to `(?1: Int, ?2: String)`
みたいなやつが書けるbidirectional typing だと、ある範囲では柔軟な推論をしてくれるけど、ある程度になると型が固定化されるみたいな型システムも割と柔軟に書けることに気づいた
寝る時つけるようのゆるゆるソックスが気に入ったので買い足そうと思ったら売れ切れてた。悲しみ