# Reading Rename.hs (version 0.9.0) ## 2022-09-18 src/Rename.hs を端から確認していこう。みた行を塗りつぶしていく感じ(古の)で。 今日見た行:1, 2, 27, 28, 29 scanDecls の型はこう: $$
{
scanDecls :: [A.Decl] -> RN ([A.ValueDecl], [A.ClassDecl], [A.InstDecl])
$$}

で、まず最初に、${scanDecl1} で宣言を値の宣言、クラスの宣言、インスタンス宣言の3種に分類しつつ、1パス目の何かをやっている。scanDecl1 の呼び出しはこんな感じ:

$$
{
  (dss, cdss, idss) <- unzip3 <$> mapM scandecl1 decls
$$}

では、${scanDecl1} の定義を順に見ていこう。l.135 - l.322 と、それなりの分量がある。しかも、未実装がそこそこ残っているようだ。

あ、その前に、${Absyn.Decl} の定義を確認しておくのがいいだろう:

$$
{
data Decl = VDecl       ValueDecl
          | CDecl       ClassDecl
          | IDecl       InstDecl
          | FixSigDecl  Fixity Int [Name]
          | DefaultDecl [Type]
          | ForeignDecl FDecl
          | SynonymDecl Type Type
          | DataDecl    (Maybe Type, Type) [Constr] (Maybe [Type])
          | NewtypeDecl (Maybe Type, Type) [Constr] (Maybe [Type])
          deriving Show
$$}