# 2017 年 12 月 ## 2017-12-30 ### [Bunny] 警告は全部けした。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
$$}

### Markdown Preview Plus
コードウォークスルーの資料は、GitHub Flavored Markdown で書くことにした。
で、ローカルでのプレビューがしたくなって、Chrome 拡張をいれた。

chrome://extensions で、「ファイルのURLへアクセスを許可する」というのにチェックをいれないといけなかったのが、ポイントかな。

よい。 

## 2017-12-28
### [Bunny] リファクタリング情報採取
これからしばらくは、動作を変えないコード改善にいそしむことにしよう。

というわけで、行数、コンパイラの警告、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 は含んでいません。

警告、ヒント数を減らしていくのはもちろんですが、やっぱり行数も減らしていきたい。

## 2017-12-23
### SW8
STARWARS Episode 8 見てきた。なんか嫌だという人も多いらしいというので、
少し覚悟していったのだけど、面白かった。わたしは、アリだと思う。

たしか前作のメイキングビデオで、Episode 7のテーマは「継承」で、
つぎは新しい物語に挑戦するみたいな事を監督が言っていたんだけど、
その通り、チャレンジングでいいんではないでしょうか。

エンドロールは全部みたかったけど、いっしょに見た次男氏がトイレにいきたいというので、エンドロールはじまってすぐ退場。ま、これは仕方がない。

### [bunny] DictPass をきれいにしたい。

アドベントカレンダーむけに型推論を勉強して、Typing Haskell in Haskell
や、Making ad-hoc polymorphism less ad hoc などを何度も読み返したおかげで、
型推論周りのコード理解が深まったと思う。

アドベントカレンダー向け記事の未稿部分を補いたいのもあるけど、
自分のプロジェクトを先に進められそう、進めたい気持ちが高まったきたので、
そっちに従うことにする。

前より読めるようになった目で DictPass.hs をみると、結構変なことをしている${書いているときも、結構変かもという自覚はあったんだけど、なにが正しいかわかってなかった}。
Core中の型に量化型変数が含まれるために、このモジュール内だけで用いるための、
量化型変数対応版特殊 mgu, subst みたいなのを書いている。これは無駄だし、おかしい。

TGen が残ってしまった原因には、いくつかあって、
TrCore において、Scheme から qt をとりだすときに、
実体化しないまま単純に抜き出していたのがひとつ。

さらに、それにあわせるために、DictPass 中では、逆に実体をわざわざ quantify していた。

(ちなみに、Semant.hs における quantify まで取り除いたらだめなはず)

このあたりをあらためれば、DictPass 内でもふつうに mgu, apply を使えばいい。
DictPass では一切 quantify いらない。


## 2017-12-20

新しいPCは、SSD250GBでいい感じなので、これを機に Haskell の開発環境を
stack に移行。typeinference を stack 対応するのは、わりとすぐできたと思う。

ただ、Windows 32-bit 環境で stack は無理っぽかった。
両方併用でいこう。

また、エヌユルさんの記事をみて、stylish-haskell と hlint 導入。