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 ++ "]"
以下のようにすると、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)で調査しよう。
067 対処により、本件も解決。lib/Prelude.hs を修正して、クローズ。