[obsidian] vault backup: 2025-08-18 12:10:15[
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build / build (push) Successful in 7m26s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build / build (push) Successful in 7m26s
				
			This commit is contained in:
		@@ -11,6 +11,8 @@
 | 
			
		||||
 | 
			
		||||
[documentation/language/Records.md at master · purescript/documentation · GitHub](https://github.com/purescript/documentation/blob/master/language/Records.md#extending-records)
 | 
			
		||||
 | 
			
		||||
[documentation/language/Types.md at master · purescript/documentation · GitHub](https://github.com/purescript/documentation/blob/master/language/Types.md#row-polymorphism)
 | 
			
		||||
 | 
			
		||||
レコード型のコンストラクタが‘`Row Type -> Type`(Rowはカインド変数)になる
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -35,7 +35,7 @@ https://github.com/mimium-org/mimium-rs
 | 
			
		||||
 | 
			
		||||
## マクロ
 | 
			
		||||
 | 
			
		||||
- [[mimiumと多段階計算]]
 | 
			
		||||
- [[mimiumの多段階計算]]
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
### ランタイム周りについて
 | 
			
		||||
 
 | 
			
		||||
@@ -77,46 +77,20 @@ channel = 1000;//
 | 
			
		||||
最後の行のように、普通にAssign書き込むのもできるようにしておきたい。これできるようにするには、Assignをオーバーロードできるような型システムが必要なのかな`param(コンストラクタ)`と`get_param_name`、`get_param`、`set_param`の4種類があれば十分か
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## ParamよりControllerの方が良くないか
 | 
			
		||||
 | 
			
		||||
[[mimiumのレコード型]]のデフォルト実装、関数のデフォルト引数の組み合わせに対して自動でパラメーターが作られるようにしたい
 | 
			
		||||
Parameterは単に関数の引数という意味合いにもとれてしまう
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
fn gen_synthesizer(){
 | 
			
		||||
	let s = |gate = 0,freq=1000,gain = 1.0|{
 | 
			
		||||
		...
 | 
			
		||||
	}
 | 
			
		||||
	s({..})
 | 
			
		||||
}
 | 
			
		||||
let mysynth = gen_synthesizer();
 | 
			
		||||
Inputだとプログラムの入力という意味は伝わりやすいが、オーディオインプットとの区別がつきづらくなってしまう
 | 
			
		||||
 | 
			
		||||
fn dsp(){
 | 
			
		||||
	mysynth()
 | 
			
		||||
}
 | 
			
		||||
ので、Controllerがわかりやすいかもしれない
 | 
			
		||||
## [[mimiumのレコード型]]の実装と組み合わせる
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
これを実行すると、隠れレコード構造体定義とグローバルなデフォルト引数が作られる
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
...
 | 
			
		||||
type defaultarg = {
 | 
			
		||||
 "gate":number = 0,
 | 
			
		||||
 "freq":number = 1000,
 | 
			
		||||
 "gain":number = 1.0
 | 
			
		||||
}
 | 
			
		||||
let default_arg_for_mysynth = param("mysynth",defaultarg::default());
 | 
			
		||||
fn dsp(){
 | 
			
		||||
	mysynth()
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
dsp内で`mysynth({..})`と実行してしまうと、これがグローバルなコンテキストで作られない可能性がある・・のか?いや、でも基本的に書き換えられる心配はないからいいのかな
 | 
			
		||||
 | 
			
		||||
デフォルト引数構造体のインスタンスは必ずグローバル評価で行う、だとパラメトリックな生成はできないし問題起きそう
 | 
			
		||||
デフォルト実装、関数のデフォルト引数の組み合わせに対して自動でパラメーターが作られるようにしたい
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
//自動キャストとジェネリクスの組み合わせさえうまくいけばこのくらいのことはできそう
 | 
			
		||||
let p = param({..});
 | 
			
		||||
let p = controller({..});
 | 
			
		||||
fn dsp(){
 | 
			
		||||
	p |>
 | 
			
		||||
	|gate = 0,freq = 1000,gain = 1.0|{
 | 
			
		||||
@@ -125,4 +99,44 @@ fn dsp(){
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
ということは、とりあえず雑にParamを実装して
 | 
			
		||||
これを実行すると、隠れレコード構造体定義とグローバルなデフォルト引数が作られる
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
...
 | 
			
		||||
type defaultarg = {
 | 
			
		||||
 gate:number = 0,
 | 
			
		||||
 freq:number = 1000,
 | 
			
		||||
 gain:number = 1.0
 | 
			
		||||
}
 | 
			
		||||
let p = param(defaultarg::default());//p is higher order function
 | 
			
		||||
fn dsp(){
 | 
			
		||||
	mysynth(p())
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
dsp内で`mysynth({..})`と実行してしまうと、これがグローバルなコンテキストで作られない可能性がある・・のか?いや、でも基本的に書き換えられる心配はないからいいのかな
 | 
			
		||||
 | 
			
		||||
デフォルト引数構造体のインスタンスは必ずグローバル評価で行う、だとパラメトリックな生成はできないし問題起きそう
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## [[mimiumの多段階計算]]と組み合わせる
 | 
			
		||||
 | 
			
		||||
`controller`関数がジェネリックな`Code`型を返す関数であれば、関数内に直接埋め込むこともできそう
 | 
			
		||||
 | 
			
		||||
```rust
 | 
			
		||||
//これが
 | 
			
		||||
fn dsp(){
 | 
			
		||||
	controller!({..}) 
 | 
			
		||||
	|> |gate = 0,freq = 1000,gain = 1.0|{
 | 
			
		||||
		...//do something
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
//こう展開される(本当にジェネリックにできるかは要検討)
 | 
			
		||||
fn dsp(){
 | 
			
		||||
	__get_generated_controller_value(uuid)
 | 
			
		||||
	|> |gate = 0,freq = 1000,gain = 1.0|{
 | 
			
		||||
		...//do something
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,6 @@
 | 
			
		||||
 | 
			
		||||
[[型推論]]
 | 
			
		||||
 | 
			
		||||
[[Erg]]のドキュメントが参考になる
 | 
			
		||||
 | 
			
		||||
[[構造的部分型]]と[[単一化]]の組み合わせ方の参考になる
 | 
			
		||||
 
 | 
			
		||||
@@ -125,7 +125,7 @@ fn reverse(origin:Region)->Region{
 | 
			
		||||
 | 
			
		||||
## 多段階計算と組み合わせる
 | 
			
		||||
 | 
			
		||||
[[mimiumと多段階計算]]で、それなりに多段階計算の実装が間に合ってきた。
 | 
			
		||||
[[mimiumの多段階計算]]で、それなりに多段階計算の実装が間に合ってきた。
 | 
			
		||||
 | 
			
		||||
FadeinOutのようなリージョン→リージョンの関数はステージ0の計算と考えることができる。
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
 Submodule content/private updated: dfc6e0e9c1...7197969f40
									
								
							
							
								
								
									
										4
									
								
								content/型推論.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								content/型推論.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
---
 | 
			
		||||
date: 2025-08-18 11:26
 | 
			
		||||
---
 | 
			
		||||
#stub
 | 
			
		||||
		Reference in New Issue
	
	Block a user