# 001: adt-sample2 で types do not unify: (TCon (Tycon "Prelude.Int" Star),TCon (Tycon "Prelude.Integer" Star)) [↑up](bunny_notes) - issued: 2020-04-07 - 分類: A サンプルコードが fail - status: Closed (2020-04-22) ## 現象 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
$$}

なお、この ${Int} を ${Integer} に変えたものは通る (sample128)。

## 調査状況

### 2020-04-07

エラー発生個所を絞るために、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

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