# 014: 単純なケースで deriving Show をサポートする [↑up](bunny_notes) - issued: 2020-04-12 - 分類: B 機能追加 - status: Closed (2020-04-12) ## 説明 deriving Show のサポート ⇒ deriving ではなく、まず明示的に Show クラスにいれるやり方を先に対処することにした。 ## 調査ログ ### 2020-04-12 ### 現状確認 この件のために、いくつかテストケースを追加した。 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 関数も追加した。以下の二つのケースが通るようになった:

- sample138
- sample139

実装していて気になったのが、Prim.java にある ShowFunc.call の引数が、なぜ AtomExpr ではなく、AtomExpr[] (配列)になっているのかということ。あとで調べておこう。⇒ [016](bissue016)

また、現状では deriving Show してなくても、show できてしまう。
これは、型検査の問題なのだが、本件とはわけて別の issue とする。⇒ [017](bissue017)