[Haskell-beginners] how to modify show for a list of certain types
Daniel Fischer
daniel.is.fischer at googlemail.com
Sat Apr 2 15:51:33 CEST 2011
On Saturday 02 April 2011 15:32:07, Manfred Lotz wrote:
> Hi there,
> I have a list of say type Record which I write to a file and
> read back from the file if required.
>
> The list's content is a single line in the file it doesn't matter how
> many records the list contains.
>
> I would like to modify show for type Record in a way that show does
> work like the normal show but additionally adds a newline at the end of
> the string.
>
> I'm a bit lost how to do that. Any idea?
There's a showList function in the Show class, you can use that to define
non-standard list displays (as it's done for [Char] = String).
You cannot then derive the Show instance, which may be a minor
inconvenience or a major pain.
In the latter case, you could define a newtype,
newtype RecordList = RL [Record]
instance Show RecordList where
show (RL xs) = unlines (map show xs)
and use that to display when you want things on separate lines.
Or you could modify the function used to writing the file, instead of
hPutStrLn fileHandle (show recordList)
mapM_ (hPrint fileHandle) recordList
More information about the Beginners
mailing list