
"Pasqualino \"Titto\" Assini"
Hi,
I just noticed that in ghci:
data Test = Test String
instance Show Test
show $ Test "Hello"
Well, for starters you specify such a thing in ghci, so presumably you loaded a file with these definitions.
Will result in infinite recursion.
Is this a known bug?
Not a bug. Let us consider the definition of the Show class: class Show a where showsPrec :: Int -> a -> ShowS showsPrec _ x s = show x ++ s -- | A specialised variant of 'showsPrec', using precedence context -- zero, and returning an ordinary 'String'. show :: a -> String show x = shows x "" showList :: [a] -> ShowS showList ls s = showList__ shows ls s Note that showsPrec and show are by default mutually recursive, and that all the class methods have a default definition. Thus, just saying "instance Show Test" like you have above is valid, but not very helpful. This is why the documentation for the Show class specifies that the minimal complete definition is either showsPrec or show: defining at least one of these will cut out of the infinite recursion loop. Of course, a better question is: why are you writing your own instance for Show? Unless your data type is complex, you should just have "deriving (Show)" (as well as classes such as Eq, Ord and Read) attached to your datatype definition. -- Ivan Lazar Miljenovic Ivan.Miljenovic@gmail.com IvanMiljenovic.wordpress.com