To just display on different lines, do not change show , just do unlines (map show customerList) . This will show each of them, and then return them along with newlines between them.
However, you asked about a show change for the type synonym, so here are your options:
show is for basic data serialization. If you want to do something else, you have several options:
Example 1
displayC :: Customer -> String displayC = (++"\n").show
Example 2
{-
(Note that you should say instance Display Customer , not instance of Display Customer .)
Output Example:
*Main> display ((3,4,[5,6])::Customer) "(3,4,[5,6])\n"
Use these language extensions with caution.
Example 3
newtype Cust = Cust Customer displayCust (Cust c) = show c ++ "\n"
Example 4
data CustomerTup = CTup Int Int [Int] displayCTup (CTup ab cs) = show (a,b,cs) ++ "\n"
or even better
data CustomerRec = CRec {custno::Int, custAge::Int, custMeasurements::[Int]} deriving Show displayCRec r = show (custno r,custAge r,custMeasurements r) ++ "\n"
where you can even stick to the show instance instance. The data path is good, because there is more type safety, and the record type stops you from making erroneous errors.
Example 5
stuff = unlines $ map show [(1,2,[3,4]),(5,6,[7,8,9])]
or even
morestuff = unlines [show (1,2,[3,4]), show (5,6,[7,8,9]), "are all more numbery than", show (True,4,False)]