# 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)