[obsidian] vault backup: 2025-08-03 22:54:20[
All checks were successful
Build / build (push) Successful in 11m36s

This commit is contained in:
2025-08-03 22:54:21 +09:00
parent 685180aa47
commit 90b0e36115

View File

@@ -60,7 +60,7 @@ modname::foo!()
これがあったとすると、
```rust
let modname = ${
extern modname = ${
foo = | | { },
...
}
@@ -77,7 +77,47 @@ modname.foo!()
しかし、そうするとラムダ計算として定義する旨味はあんまりないのでは、という気がしてくる
`extern name : Type `という宣言に変換さえできれば意味論を保ってコンパイルはできそう
型がつけられさえすればいいから、そこで循環する定義にならなければOK
```rust
//modA.mmm
use modB
pub fn hoge(){
modB::hoge()
}
//modB.mmm
use modA
pub fn hoge(){
modA::hoge()
}
```
(ランタイムで無限ループするけどそれはいいとして)変換するとこう
```rust
// modA.mmm
extern modB:{
hoge: ?
}
fn hoge(){
modB.hoge()
}
//modB.mmm
extern modA:{//実際は型コンストラクタとかで覆って区別できるようにすべき
hoge: ?
}
fn hoge(){
modA.hoge()
}
```
`modA::hoge : 'a ()->'a, modB::hoge : 'a ()->'a `
ここまでしか型は決定できないということに
---