# 055: showList のデフォルト実装ではエラー [↑up](bunny_notes) - issued: 2020-05-03 - 分類: 分類:C 改善項目 - status: Closed (2020-05-13) ## 概要 showList について、class Show のデフォルト実装ではエラーするので、 Int, Integer それぞれに特殊実装を書いて回避している。 deriving Show は実現するまえに、この件対処が必要。 $$
{ instance Show Integer where show = Prim.integerShow showList xs = (++) (showlist' xs) where showlist' [] = "[]" showlist' [x] = "[" ++ Prim.integerShow x ++ "]" showlist' (x:xs) = "[" ++ foldl (\s t -> s ++ "," ++ Prim.integerShow t) (show x) xs ++ "]" $$} $${ instance Show Int where show = Prim.intShow showList xs = (++) (showlist' xs) where showlist' [] = "[]" showlist' [x] = "[" ++ Prim.intShow x ++ "]" showlist' (x:xs) = "[" ++ foldl (\s t -> s ++ "," ++ Prim.intShow t) (show x) xs ++ "]" $$} ## 調査ログ ### 2020-05-08 以下のようにすると、showlogs' が多相になる: $${ instance Show Integer where show = Prim.integerShow showList xs = (++) (showlist' xs) where showlist' [] = "[]" showlist' [x] = "[" ++ show x ++ "]" showlist' (x:xs) = "[" ++ foldl (\s t -> s ++ "," ++ show t) (show x) xs ++ "]" -- showlist' :: [Integer] -> [Char] $$} そのときの Core をみると、辞書の解決がなんか変な気がする。 小さいテストケースで再現したので、そちら([067](bissue067))で調査しよう。 ### 解決 [067](bissue067) 対処により、本件も解決。lib/Prelude.hs を修正して、クローズ。