[Haskell-cafe] ShowList magic

Ivan Miljenovic ivan.miljenovic at gmail.com
Sun May 16 23:00:44 EDT 2010


On 17 May 2010 12:56, Abby Henríquez Tejera <paradoja at gmail.com> wrote:
> I'm a Haskell newbie and there's a bit of Haskell code that I don't
> understand how it works. In the prelude, defining the class Show, the
> function showList is implemented twice, one for String and another one
> for other lists:
>
>    showList cs = showChar '"' . showl cs
>                 where showl ""       = showChar '"'
>                       showl ('"':cs) = showString "\\\"" . showl cs
>                       showl (c:cs)   = showLitChar c . showl cs

This is the default implementation; if an instance doesn't define
showList then this value is used.

>    showList []       = showString "[]"
>    showList (x:xs)   = showChar '[' . shows x . showl xs
>                        where showl []     = showChar ']'
>                              showl (x:xs) = showChar ',' . shows x .
>                                             showl xs

This is how the Show instance for Char defines showList (i.e. it
overrides the default one).

There would then be something like:

instance (Show a) => Show [a] where
    show = showList

So, depending on the type used, it will either use the special ".."
method (for String = [Char]) or the default one (or another special
one if another data type overrides the default implementation for
Show).

See http://book.realworldhaskell.org/read/using-typeclasses.html for
more information.

-- 
Ivan Lazar Miljenovic
Ivan.Miljenovic at gmail.com
IvanMiljenovic.wordpress.com


More information about the Haskell-Cafe mailing list