089: 式変換で生成する変数名について

↑up

概要

型注釈付きの項、(a :: Int) などは、Rename において、 次のように変換するようにした。

let
 x :: Int
 x = a
in
 x

そうすると、(x :: Int) は次のようになってしまい、無限ループ:

let
 x :: Int
 x = x
in
 x

つまり、コンパイラが勝手に生成する変数名は、文法上ソースコードに絶対に現れないものでなければならない。この件については、"_x#" としたが、ほかにもすべて対処が必要。