# 008: nodup.hs が renRhs の未実装でエラー [↑up](bunny_notes) - issued: 2020-04-09 - 分類: A サンプルコードが fail - status: Closed (2020-04-15) ## 現象 $$
{
$ ./test-compile.sh testcases/nodup.hs
source file: testcases/nodup.hs
dst dir: /nodup
doCompile ... done.
implicitPrelude ... done.
doCompile ... bunnyc: renRhs not yet implemented.
(略)
CallStack (from HasCallStack):
error, called at src/Rename.hs:416:3 in main:Rename
$$}
## 調査ログ
### 2020-04-15
renRhs の未実装で引っかかっているのは、以下(trace の出力を手で整形したもの):
$${
GuardedRhs
[
( [ExpStmt (InfixExp (VarExp (Name {origName = "y", namePos = (3,19), isConName = False}))
(Name {origName = "==", namePos = (3,21), isConName = False})
(VarExp (Name {origName = "x", namePos = (3,24), isConName = False})))
]
, FunAppExp (VarExp (Name {origName = "nodups", namePos = (3,31), isConName = False}))
(ParExp (InfixExp (VarExp (Name {origName = "x", namePos = (3,39), isConName = False}))
(Name {origName = ":", namePos = (3,40), isConName = True})
(VarExp (Name {origName = "xs", namePos = (3,41), isConName = False}))
)
)
)
,([ExpStmt (VarExp (Name {origName = "otherwise", namePos = (4,19), isConName = False}))]
,InfixExp (VarExp (Name {origName = "y", namePos = (4,31), isConName = False}))
(Name {origName = ":", namePos = (4,33), isConName = True})
(FunAppExp (VarExp (Name {origName = "nodups", namePos = (4,35), isConName = False}))
(ParExp (InfixExp (VarExp (Name {origName = "x", namePos = (4,43), isConName = False}))
(Name {origName = ":", namePos = (4,44), isConName = True})
(VarExp (Name {origName = "xs", namePos = (4,45), isConName = False})))
)
)
)
]
[]
$$}
### 実装、解決
nodup.hs で出現する単純な guarded rhs を if then else if ... の列に変換するコードを renRhs
に追加、nodup.hs は通るようになった⇒ sample144
ただ、ごく単純なケースのみしか対応していないので、それについては別の Issue とした。
- [029](bissue029): renRhs が GuardedRhs の単純なケースしか対応していない