# 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 をつくってためす。
など。