警告は全部けした。hint は 3 つ残っているが、これらは今後。
src/Absyn.hs 151 lines 0 warnings 0 hint src/CodeGen.hs 469 lines 0 warnings 2 hints src/CompilerOpts.hs 91 lines 0 warnings 0 hint src/Core.hs 44 lines 0 warnings 0 hint src/DDumpAssump.hs 15 lines 0 warnings 0 hint src/DDumpCore.hs 15 lines 0 warnings 0 hint src/Desugar.hs 18 lines 0 warnings 0 hint src/DictPass.hs 221 lines 0 warnings 0 hint src/NameMangle.hs 27 lines 0 warnings 0 hint src/Pattern.hs 121 lines 0 warnings 0 hint src/PreDefined.hs 182 lines 0 warnings 0 hint src/Semant.hs 904 lines 0 warnings 0 hint src/STG.hs 78 lines 0 warnings 0 hint src/Symbol.hs 39 lines 0 warnings 0 hint src/TrCore.hs 257 lines 0 warnings 1 hint src/TrSTG.hs 38 lines 0 warnings 0 hint src/Types.hs 47 lines 0 warnings 0 hint src/Typing.hs 644 lines 0 warnings 0 hint ---- 3361 lines 0 warnings 3 hints
コードウォークスルーの資料は、GitHub Flavored Markdown で書くことにした。 で、ローカルでのプレビューがしたくなって、Chrome 拡張をいれた。
chrome://extensions で、「ファイルのURLへアクセスを許可する」というのにチェックをいれないといけなかったのが、ポイントかな。
よい。
これからしばらくは、動作を変えないコード改善にいそしむことにしよう。
というわけで、行数、コンパイラの警告、hlint によるヒント数を採取するスクリプトを追加。
src/Absyn.hs 151 lines 0 warnings 0 hint src/CodeGen.hs 454 lines 35 warnings 22 hints src/CompilerOpts.hs 92 lines 1 warnings 1 hint src/Core.hs 45 lines 0 warnings 2 hints src/DDumpAssump.hs 15 lines 0 warnings 1 hint src/DDumpCore.hs 15 lines 0 warnings 2 hints src/Desugar.hs 18 lines 0 warnings 0 hint src/DictPass.hs 221 lines 0 warnings 0 hint src/NameMangle.hs 27 lines 0 warnings 1 hint src/Pattern.hs 121 lines 34 warnings 7 hints src/PreDefined.hs 192 lines 4 warnings 25 hints src/Semant.hs 909 lines 13 warnings 0 hint src/STG.hs 84 lines 18 warnings 2 hints src/Symbol.hs 39 lines 0 warnings 4 hints src/TrCore.hs 257 lines 0 warnings 1 hint src/TrSTG.hs 65 lines 10 warnings 3 hints src/Types.hs 51 lines 0 warnings 2 hints src/Typing.hs 644 lines 7 warnings 18 hints ---- 3400 lines 122 warnings 91 hints
Parser.y, Lexer.x は含んでいません。
警告、ヒント数を減らしていくのはもちろんですが、やっぱり行数も減らしていきたい。
STARWARS Episode 8 見てきた。なんか嫌だという人も多いらしいというので、 少し覚悟していったのだけど、面白かった。わたしは、アリだと思う。
たしか前作のメイキングビデオで、Episode 7のテーマは「継承」で、 つぎは新しい物語に挑戦するみたいな事を監督が言っていたんだけど、 その通り、チャレンジングでいいんではないでしょうか。
エンドロールは全部みたかったけど、いっしょに見た次男氏がトイレにいきたいというので、エンドロールはじまってすぐ退場。ま、これは仕方がない。
アドベントカレンダーむけに型推論を勉強して、Typing Haskell in Haskell や、Making ad-hoc polymorphism less ad hoc などを何度も読み返したおかげで、 型推論周りのコード理解が深まったと思う。
アドベントカレンダー向け記事の未稿部分を補いたいのもあるけど、 自分のプロジェクトを先に進められそう、進めたい気持ちが高まったきたので、 そっちに従うことにする。
前より読めるようになった目で DictPass.hs をみると、結構変なことをしている*1。 Core中の型に量化型変数が含まれるために、このモジュール内だけで用いるための、 量化型変数対応版特殊 mgu, subst みたいなのを書いている。これは無駄だし、おかしい。
TGen が残ってしまった原因には、いくつかあって、 TrCore において、Scheme から qt をとりだすときに、 実体化しないまま単純に抜き出していたのがひとつ。
さらに、それにあわせるために、DictPass 中では、逆に実体をわざわざ quantify していた。
(ちなみに、Semant.hs における quantify まで取り除いたらだめなはず)
このあたりをあらためれば、DictPass 内でもふつうに mgu, apply を使えばいい。 DictPass では一切 quantify いらない。
新しいPCは、SSD250GBでいい感じなので、これを機に Haskell の開発環境を stack に移行。typeinference を stack 対応するのは、わりとすぐできたと思う。
ただ、Windows 32-bit 環境で stack は無理っぽかった。 両方併用でいこう。
また、エヌユルさんの記事をみて、stylish-haskell と hlint 導入。