026: クラス定義の取り扱いをきちんと一般的に

↑up

概要

Issue 023 の対応過程で、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

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