限られた型コンストラクタに関する変換だけがハードコーディングされている。
-- TODO: should be fix this hard coding. renSigdoc (A.Tycon n) _ = case origName n of "Integer" -> return tInteger "Int" -> return tInt "String" -> return tString "IO" -> return $ TCon (Tycon "IO" (Kfun Star Star)) "()" -> return tUnit "Bool" -> return tBool s -> error $ "renSigDoc $ A.Tycon " ++ s
scandecl d@(A.DataDecl (maybe_context, ty) consts maybe_dtys) 内の renTy (A.Tycon i) にも同様の問題がある。
renTy (A.Tycon i) = case origName i of -- TODO: "Int" -> tInt "Integer" -> tInteger "Char" -> tChar x -> error $ "Non-exhaustive patterns: " ++ x
現状の実装では、たとえばデータ構築子の型は、 scandecl d@(A.DataDecl (maybe_context, ty) consts maybe_dtys) の中で環境に辞書(Assump ) として保持されているが、 型構築子については、同様のものがなく、こうして決め打ちで解決している状態。
型構築子についても、引き回す必要がある。(引き回す、というのは、分割コンパイルを想定)
まずは、いまの決め打ちと同等の辞書を用いるようにして、 つぎに、データ宣言でつくられたやつを処理(これをやると adt-sample4.hs が通るはず)。
モジュールの import/export をきちんと処理するのは、他の Assump も一緒にやる 必要があるので、あとまわしにしたい。後回しにするタスクは以下:
これらを後回しにしつつ、現状と同等の処理を決め打ちじゃなくすことのみ実施。
⇒ 前項は、RnState に辞書を付け加えたことで自然に達成された。後者を 005 として採番。
今回は、現状のままリファクタリングしたので、TypeConsts の型は [(Id, Type)] としたが、 [Assump] でなくていいのだろうか(006)