39 lines
1.0 KiB
Markdown
39 lines
1.0 KiB
Markdown
---
|
|
date: 2025-07-03 18:34
|
|
---
|
|
#memo
|
|
|
|
幽霊型含む、カスタムのコンストラクターを書こうとすると名前空間の問題が出てくる
|
|
|
|
二重インクルードの問題とかもあるので、先に分割コンパイルの仕組みを整える方がいい?
|
|
|
|
型の環境の中に変数解決が必要になってくる
|
|
|
|
内部的には幽霊、Opaque、バリアントで分かれててもいいかもな
|
|
|
|
```rust
|
|
enum Variant{
|
|
Phantom(Symbol),
|
|
Opaque(Symbol,TypeNodeId),
|
|
Union(Box<Self>,Box<Self>)
|
|
}
|
|
enum Type{
|
|
...
|
|
|
|
Variant(Variant)
|
|
}
|
|
```
|
|
|
|
Foldでネストするくらいなら`Vec<Box<Self>>`に収められるかな?
|
|
|
|
パーサーとASTとしてはmatch節も加えないと意味ない
|
|
|
|
で、型推論に加えなきゃいけないコードは、
|
|
|
|
- 型コンストラクタを関数として使えるように型→値環境に追加し、App式の評価で使えるように
|
|
- match式の型推論
|
|
|
|
matchのコード生成がジャンプテーブルとか出てくるとめんどくさいんだよなあ
|
|
|
|
|