Am Samstag, 6. Dezember 2008 00:13 schrieb Dmitri O.Kondratiev:
Thanks everybody for your help! I tried to implement showList, but get the same error:
{-- -- from Prelude: type *ShowS* = String<file:///C:/usr/ghc-6.6.1/doc/html/libraries/base/Prelude.html#t%3ASt ring>-> String<file:///C:/usr/ghc-6.6.1/doc/html/libraries/base/Prelude.html#t%3ASt ring> *showList* :: [a] -> ShowS<file:///C:/usr/ghc-6.6.1/doc/html/libraries/base/Prelude.html#t%3ASho wS> --}
myShows::ShowS myShows s = s ++ "\n"
data ShipInfo = Ship { name :: String, kind :: String, canons :: Int } deriving Show
No, if you derive the Show instance for ShipInfo, it automatically implements the standard showList, too. You have to do it yourself: data ShipInfo = Ship { name :: String, kind :: String, canons :: Int } instance Show ShipInfo where showsPrec p (Ship name kind canons) = ... showList xs = showString (unlines $ map show xs) or whatever you want for showList. However, somebody said it before, the Show instance should not be used for pretty-printing.
-- I get this error again: instance (Show [ShipInfo]) where showList [] = myShows [] showList (x:xs) = myShows "x" ++ showList xs
Illegal instance declaration for `Show [ShipInfo]' (The instance type must be of form (T a b c) where T is not a synonym, and a,b,c are distinct type variables) In the instance declaration for `Show [ShipInfo]' Failed, modules loaded: none.
-- What am I doing wrong? Thanks!