001: adt-sample2 で types do not unify: (TCon (Tycon "Prelude.Int" Star),TCon (Tycon "Prelude.Integer" Star))

↑up

現象

adt-sample2.hs をコンパイルすると、以下のようにエラーする:

$ ./test-compile.sh testcases/adt-sample2.hs 
source file: testcases/adt-sample2.hs
dst dir: /adt-sample2
doCompile ... done.
implicitPrelude ... done.
doCompile ... bunnyc: types do not unify: (TCon (Tycon "Prelude.Int" Star),TCon (Tycon "Prelude.Integer" Star))

adt-sample2.hs の内容は次の通り:

$ cat testcases/adt-sample2.hs 
data Hoge = Hoge Int
          | Fuga [Char]

myshow (Hoge n) = "Hoge " ++ show n
myshow (Fuga s) = "Fuga " ++ s

x = Hoge 10
y = Fuga "nine"

main = do
  putStrLn $ myshow x
  putStrLn $ myshow y

なお、この IntInteger に変えたものは通る (sample128)。

調査状況

2020-04-07 (Tue)

エラー発生個所を絞るために、adt-sample2.h を小さくしてみる。

adt-sample2x.h:

data Hoge = Hoge Int
          | Fuga [Char]

x = Hoge 10

main = do
  putStrLn "dummy."

当然ながら、これの Integer 版(adt-sample2y.hs) はOK.

数値リテラルの型が怪しいので、いちど変数に束縛してみると、通った (adt-sample2xx.hs, adt-sample2xxx.hs)

これらは、数値リテラルを変数に束縛しつつ、型制約も明示したが、変数に束縛しておけば、その変数の型を明示してなくても大丈夫だった(adt-sample2x4.hs, adt-sample2x5.hs)

trace を挿入して、途中経過をいろいろ見てみたが、被疑個所は特定できなかった。

この件はしばらく置いて、他の部分を進めてもいいかもしれない。

2020-04-22 (Wed)

044 の対処により、こちらも解決。