deriving Show のサポート ⇒ deriving ではなく、まず明示的に Show クラスにいれるやり方を先に対処することにした。
この件のために、いくつかテストケースを追加した。
drvshow.hs: これは、print がないといってこける。
data Hoge = Hoge Integer | Fuga [Char] deriving Show x = Hoge 10 y = Fuga "nine" main = do putStrLn $ show x print y
drvshow0.hs: これは、コンパイルは通ってしまって、ランタイムで警告になる。
data Hoge = Hoge Integer | Fuga [Char] deriving Show x = Hoge 10 y = Fuga "nine" main = do putStrLn $ show x putStrLn $ show y
drvshow1err.hs: というわけで、現状では、これがコンパイルエラーにならない(なるべき)
data Hoge = Hoge Integer | Fuga [Char] x = Hoge 10 y = Fuga "nine" main = do putStrLn $ show x putStrLn $ show y
すでに、デフォルトの show ファンクションにあたるものの原型は、ランタイムにあったので、それを手直しして実装。また、lib/Prelude.hs に print 関数も追加した。以下の二つのケースが通るようになった:
実装していて気になったのが、Prim.java にある ShowFunc.call の引数が、なぜ AtomExpr ではなく、AtomExpr[] (配列)になっているのかということ。あとで調べておこう。⇒ 016
また、現状では deriving Show してなくても、show できてしまう。 これは、型検査の問題なのだが、本件とはわけて別の issue とする。⇒ 017