2007-01-20 [長年日記]
λ. 関数従属性の落とし穴
以下のようなコードが型エラーになることに驚いた。
class Assoc a b | a -> b instance Assoc Int Int f :: Assoc Int b => Int -> b f x = x
fの型チェック時には個々のインスタンス宣言を参照したりしないから、考えてみれば当たり前なのだが。しかし、関数従属性(Functional Dependencies)やGADTを使うと依存型っぽいことが一部実現できるが、ちょっとでも複雑なことをしようとするとすぐに落とし穴にはまる気がする。本物の依存型が欲しい……
λ. YARVへの感慨
そういえば、YARVに末尾再帰用の命令を追加して遊んでいた(20040120#p01)のがもう3年前か。そのYARVもついに本体にmergeされたんだよなぁ……