# 004: renSigdoc (A.Tycon n) _ がハードコーディングされているのを直す [↑up](bunny_notes) - issued: 2020-04-07 - 分類:C 改善項目 - status: Closed (2020-04-08) ## 現象 限られた型コンストラクタに関する変換だけがハードコーディングされている。 $$
{
-- 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
$$}
## 調査ログ
### 2020-04-08
${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 も一緒にやる
必要があるので、あとまわしにしたい。後回しにするタスクは以下:
- 型構築子の Assump が export/import されるようにする
- qualified 識別子を適切に処理する
これらを後回しにしつつ、現状と同等の処理を決め打ちじゃなくすことのみ実施。
⇒ 前項は、RnState に辞書を付け加えたことで自然に達成された。後者を 005 として採番。
今回は、現状のままリファクタリングしたので、TypeConsts の型は [(Id, Type)] としたが、
[Assump] でなくていいのだろうか(006)