2016 年 11 月

2016-11-21 (Mon)

[Bunny] きょうの進捗

昨日、tcExpr をいちおう Case 式に対応させた*1ら、 illegal type for dictionary: TVar (Tyvar ".v129" Star) といってエラーするようになってた件。

なんか、Core 言語の時点で、あちこちに Tyvar が残っているのはおかしいはずで、 型推論が終わった時点で残っている型変数は、TGen になってるべき(つまり、型は quantifyされているべき)なんじゃないか。

というわけで、あちこちに、えい、えいっと quantify をいれてみた。 いかにも対症療法的でアレなんだけど、まずは動かすぞーという。あとできれいにしたい。

んで、そうこうしていたら、「次の」問題に出くわした。

$ ./test-compile.sh testcases/tqd.hs
(中略)
("Main.l1.l0.l0.l0.OK",[],Var (TermVar "Prelude.<=" ([IsIn "Prelude.Ord" (TGen 0)] :=> TAp (TAp (TCon (Tycon "(->)" (Kfun Star (
Kfun Star Star)))) (TGen 0)) (TAp (TAp (TCon (Tycon "(->)" (Kfun Star (Kfun Star Star)))) (TGen 0)) (TCon (Tycon "Bool" Star))))
),[IsIn "Prelude.Ord" (TGen 0)],TAp (TAp (TCon (Tycon "(->)" (Kfun Star (Kfun Star Star)))) (TGen 0)) (TAp (TAp (TCon (Tycon "(-
>)" (Kfun Star (Kfun Star Star)))) (TGen 0)) (TCon (Tycon "Bool" Star))),TAp (TAp (TCon (Tycon "(->)" (Kfun Star (Kfun Star Star
)))) (TGen 0)) (TAp (TAp (TCon (Tycon "(->)" (Kfun Star (Kfun Star Star)))) (TGen 0)) (TCon (Tycon "Bool" Star))),0,[],Nothing,F
alse)
bunnyc.exe: dictionary not found: 0

これ、OK というのは、リスト内包式を Let 式に変換したときに生じる変数なんですが、 そいつの型に qualifier がついていないので単相にみえるんだけど、その中で (<=) :: Ord t0 => t0 -> t0 -> Bool が呼ばれているのであかんやろ、といってる。

その苦情はごもっともで、OK の型がおかしい。そういや、その辺さぼったような…。

今日は、ここまで。

2016-11-16 (Wed)

[Bunny] Fixity Resolution 動いてなかった?問題。

(++) (x:xs) ys = x : (xs ++ ys) の最後の括弧をとると期待通り動かない(無限ループする)問題があって、 Fixity Resolution 動いてないのか? まったくテストしてなかったんだっけ?と思っていたのですが。

で、考えてみると、: の fixity 宣言しわすれていたし、そういえば、 : の qualified name は Prim.: だったねということで対処し、解決。

test9a は pass したので、check 用テストに加えました。(sample104) いやぁ、make check できるようにしてから、だいぶ効率があがった気がする。

今日のは、お昼休みにパッと直してコミット。 つぎあたり、tcExpr を Case 式に対応させたいね。

2016-11-14 (Mon)

ひとり Advent Calendar 2016-11-14

2016-11-11 (Fri)

ひとり Advent Calendar 2016-11-11