2015 年 6 月

2015-06-30 (Tue)

ねむい。

drive_semant: insts: Prim.Show

となるので、show 呼んでいるところをコメントアウトしたら、こうなった↓

drive_semant: cannot resolve ambiguity: (ClassEnv {ce_map = fromList [("Main.Eq",([],[])),("Main.Monad",([],[[] :=> IsIn "Main.Monad" (TCon (Tycon "Main.IO" (Kfun Star Star)))])),("Main.Ord",([],[[] :=> IsIn "Main.Ord" (TCon (Tycon "Main.Integer" Star))]))], defaults = [TCon (Tycon "Integer" Star),TCon (Tycon "Double" Star)]},[],[IsIn "Main.Ord" (TVar (Tyvar ".v6" Star))])

ちょっと時間かけてみないとな。

2015-06-29 (Mon)

おお、ねむ。

drive_semant: types do not unify: TCon (Tycon "IO" (Kfun Star Star)), TCon (Tycon "Main.IO" (Kfun Star Star))

そこで、tqd_t.hs 中にて Main の型宣言をとりあえずコメントアウトすると、

drive_semant: insts: Prim.Show

となる。もう少し、型推論通すまでかかりそう。

2015-06-22 (Mon)

[Bunny] 型推論エラー

おっと、これは少し根深そう。

アルファ変換して、すべて top level binding みたいにしちゃっているのがまずかったみたい。

ちょっとよく考えなくちゃ。

ということで、今日はねる。

追記:上に書いた通り、アルファ変換して名前は衝突しなくなったから、といって、 すべての binding をトップレベルにしてしまったのが間違い。let 式の binding は let 式の中に含めないと、レキシカルスコープがうまく実現されない。 具体的には、関数定義中のパターンによって束縛される変数スコープの外に、let binding が置かれることになって、型推論器がまっとうな文句を言っている状況。直す。

2015-06-17 (Wed)

[Bunny] toBg2 とりあえず書いて、型推論

いきなりうまくいくとは思ってなかったけど、やっぱりいろいろエラー。調べつつ直していこう。

すごーく単純なものでもエラーするんだけど、これはうまくいった。

$ echo 'x = "hoge"' | sample/drive_semant
...
["Main.x" :>: Forall [] ([] :=> TAp (TCon (Tycon "[]" (Kfun Star Star))) (TCon (Tycon "Char" Star)))]

これは、型推論というほどのものではないからね。

これもいけてるか:

$ echo 'id x = x' | sample/drive_semant
...
["Main.id" :>: Forall [Star] ([] :=> TAp (TAp (TCon (Tycon "(->)" (Kfun Star (Kfun Star Star)))) (TGen 0)) (TGen 0))]

2015-06-14 (Sun)

記録として。

長男に平手の将棋で負けた。ま、わたしは全然強くないので、わたしに勝ってもどうということはないのだが、そうか、もう負けちゃうか。

彼はクラスに将棋の強い子がいて、しょっちゅうコマ落ちでささせてもらっているらしい(どうにか五枚落ちで勝てるようになったとか)ので、あっというまに強くなってしまうんだろうな。

2015-06-11 (Thu)

そうか、TempBind の真ん中の要素は Maybe Scheme じゃなくて、Maybe (Qual Type) でよかったと気づいたので、それだけ直して、もう寝よう。

明日から日曜までは夜更かししない予定なので、また、しばらく空いちゃうな。

2015-06-10 (Wed)

[Bunny] toBg1

toBg1 で quantify を済ませるというのは思ったとおりにできた。

んで、toBg2 に移る前に、同じ名前の Alts を束ねるのがうまくいっているかみてみたら、 ぜんぜんうまくいってなかった。

(92,"Main.%IO.fail","Main.qsort")
(92,"Main.qsort","Main.l3.l0.l0.l0.l0.l0.F")
(91,"Main.l3.l0.l0.l0.l0.l0.F","Main.l3.l0.l0.l0.l0.l0.F")
(92,"Main.l3.l0.l0.l0.l0.l0.F","Main.l3.l0.l0.l0.OK")
(92,"Main.l3.l0.l0.l0.OK","Main.l3.l0.smaller")
(92,"Main.l3.l0.smaller","Main.l3.l0.l1.l0.l0.l0.F")
(91,"Main.l3.l0.l1.l0.l0.l0.F","Main.l3.l0.l1.l0.l0.l0.F")
(92,"Main.l3.l0.l1.l0.l0.l0.F","Main.l3.l0.l1.l0.OK")
(92,"Main.l3.l0.l1.l0.OK","Main.l3.l0.larger")
(92,"Main.l3.l0.larger","Main.qsort")
(92,"Main.qsort","Main.main")

ああ、そうか。いっこめの Main.qsort とにこめの Main.qsort の間に、 ローカルな binding がいっぱい挟まるのか。

同じレベルの他の名前にぶつかるまで遡るなどが必要。実際は、tbs から名前で検索して、

という、抽出関数をつくるのがよさそう。

2015-06-01 (Mon)

[Bunny] Rename おわりかけなんだけど…

ノートに書いてあったメモにしたがって、少し進めたい