# 026: クラス定義の取り扱いをきちんと一般的に [↑up](bunny_notes) - issued: 2020-04-14 - 分類:C 改善項目 - status: Open ## 概要 Issue [023](bissue023) の対応過程で、${renClassDecls :: [A.ClassDecl] -> RN [TempBind]} 内関数である ${clsadd} を super class に対応させたが、 かなり特別なケースのみ対応となっている。 現状のコードは以下のようになっている: $$
{
    clsadd (maybe_sc, A.AppTy (A.Tycon n) _) = do
      cname <- qname $ origName n
      sps <- case maybe_sc of
               Just sc -> do s <- qname $
                                  (\(A.ParTy (A.AppTy (A.Tycon i) _)) -> origName i) sc
                             return [s]
               Nothing -> return []
      st <- get
      let ce = rnCe st
          ce' = fromMaybe (error $ "addClass failed: " ++ show (cname, ce))
                (addClass cname sps ce)
      put $ st{rnCe=ce'}
      return cname
$$}

- まず、Absyn の時点ですでにそうなのだが、maybe_sc が Maybe Type となっていて super class が一つの場合にしか対応していない
- 現状の super class が ParTy であるという決めつけ
- class, super class ともに一つだけ型変数をもつという決めつけ

いずれも、言語仕様にそって、一般的な形を受け付けるようにしなければならない。