標高+1m

Don't be rational.

Carrotシノニムの改善

ここ数ヶ月Carrotを全く触っていなかった。これ以上放置するとまた飽きて捨てたリポジトリが増えることになるからちょこっとしたコミットを作って浮上させた。

(synonym Map  (lambda [a b] `(List (Pair ,a ,b))))

(= (name (Map Keyword String) (Option String))
   m
   (assq :name m))

要はBoolから(Fn a a a)へみたいな単純なエイリアスしか張れなかった物をパラメータに対応させた。lambdaを使っているのはただevalすれば済んで楽だからで、将来的には普通に(synonym (Map a b) (List (Pair a b)))みたいに書けるようにする。

あとやりたいのは総称関数を使う関数のテンプレート化。 今のCarrotは、(List a)を取る関数が、中でaな値にshowみたいな総称関数を適用していると、showのメソッドを静的に決定できなくてこける。関数の型をテンプレートにして、aが決定されたタイミングでaを当てはめた型を型テーブルに登録して実装にリンクを張るっていうことをすれば解決できそう。そうじゃなきゃランタイムの値に型をくっつけて回ってランタイムでディスパッチってことになると思うけどそれはやりたくない。