Logについて

Glispの式は、型のミスマッチがあろうと実行時エラーがあろうと、極力何らかの値を返そうとする。そういった際、暗黙的にデフォルト値などにフォールバックするのではなく、ログを保持する。

~~Eval, Inferのいずれにおいても、Logが発生する可能性がある。~~ここはやっぱりEvalに絞ったほうが良い気がする。Logはそれが発生したAstへの参照を持ち、Astはそれ自身から発生したLogをキャッシュする。

種類

Logを出力するケース

Ast eval infer
Sym - Not bounded, Circular reference
Obj - -
Literals - -
Defn -
DefTyFn - -
EVec, EDict
Call 関数内部でのLog, 引数のミスマッチ
Scope - -

LogとWriter

元々はWriter型にしていたが、子孫要素のLogを集める必要がなくなった。

ただ一方、Fn値(Glispからブートストラップされた関数)を適用する時、bodyの内部から生じたLogは集めてやる必要がある。