# 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)