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)。
エラー発生個所を絞るために、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 を挿入して、途中経過をいろいろ見てみたが、被疑個所は特定できなかった。
この件はしばらく置いて、他の部分を進めてもいいかもしれない。
044 の対処により、こちらも解決。