# 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 の対処により、こちらも解決。