# 2018 年 5 月 ## 2018-05-10 ### Quote [オスプレイの設計は見事、そして鳥人間の罠](http://business.nikkeibp.co.jp/atcl/opinion/16/021900056/050200007/?P=3) より $$
{
私は、今の三菱のエンジニアに「なにがなんでも作りたい」という意欲があるのか、と疑問を覚えるんですよ。

それは、精神論のようにも聞こえますが。

いいえ。仕事を離れても、自分が損をしようが得をしようが、自分で作りたいという喉の渇きにも似た意欲が、航空機の設計には不可欠なんです。
$$}


## 2018-05-09
### [Bunny] 抽象データ型への対応(いっこめ)
昨日時点で出ていた、mkHoge が出力されない問題に対応。

## 2018-05-08
### [Bunny] 抽象データ型への対応

去年からずっと時間がとれていなかった、このプロジェクトですが、少しずつでも進めていくようにしたい。

そういうわけで、1月くらいでとまっていたノートを読み返したりして思い出しながら続きに取り掛かり。
いやぁノートって偉大だ。ぜんぜん覚えていないようで、まぁ、端から端まで自分で書いたコードとノートが手元にあるのだから、なんとかなるものです。

次のようなサンプル (adt-sample.hs) を、どうにかコンパイルできる(?)ようになった。

$$
{
-- ADT: Algebraic Data Type

data Direction = Right | Left | Up | Down
               -- deriving Show

to_s Up    = "Up"
to_s Left  = "Left"
to_s Right = "Right"
to_s Down  = "Down"

main = putStrLn $ to_s Right
$$}

ただし、このままだと、ランタイムエラーになる。ユーザ定義のデータ構築子を生成するコードがないという。
そういえば、True や False については、Prim.java のなかに用意してあった。

仮対処で、Main.java に、以下のコード片を手で加えてやると、期待通りに動くようになった。

$$
{
    private static Expr mkExpr(HeapObj obj){
        return new AtomExpr(new Var(obj));
    }
    public static Expr mkRight(){
        return mkExpr(new ConObj(new Cotr("Main.Right"), new AtomExpr[0]));
    }
$$}

というわけなので、続きとしては、今回手で加えたようなコード片を、コンパイラが吐くようにしてやればいいわけです。

その他、ちょっとした覚書き:

- コードは全般的に未だひどいのですが、今回 TrCore を更新した部分が特にひどかった印象。もともと状態モナドを使わず書いていたのを、一部だけモナド化してあって、今回 ConstructorInfo を渡したかった部分は非モナド化部分だったので、とてもゴタゴタした。あとで直す。
- 上で指摘した、mkRight などの生成を考えると、preDefined な ConstructorInfo と、そうでないものは分けたくなるよなぁ
- adt-sample2 で context reduction エラーになるのは、なんか Num 周りのようだったので、一部をコメントアウトした adt-sample2b をつくってためす。

など。