[Haskell-cafe] Formated output with ghci

Frank frank at geoinfo.tuwien.ac.at
Sat Jan 14 11:39:26 EST 2006

A 'stupid' question (sort of an embarassing one):

I want to do formated output by converting data types to strings and the
bring them in a formated way together. I use ghci 6.4 and when I want to see
this text then it is shown as a string (i.e. with "... " added around) and
the formating characters in the text (e.g. \n) are quoted and not executed.
(if I apply show to the text string, then the above is done twice!)

This does occur if I use a defined function (something like 'toString' or
'text') and does not occur if I use show (but I have other reasons not to
use show). 

Is there a cure to have output formated with ghci without using show to
individually convert data types into strings?

Here an example output:

text s2
"last id used #2\n\n(#2,EntType {unEntType = \"Point\"})\n(#1,EntType
{unEntType = \"Point
\"})\n\n\n  deleted\nRelX empty\n\nHCons (Region2start \"start of
region\",RelX empty\n) (
HCons (Region2end \"end of region\",RelX empty\n) (HCons (Point2coord
\"Coordinates of Poi
nt\",\n(#2,\n[NV 0.0 100.0])\n(#1,\n[NV 0.0 0.0])\n\n) HNil))"

Wrapping the text string into a data type and then apply show to this data
type gives also the desired result. Is there an easier way?

Help is highly appreciated

module OutputTest where

data X = X Int Int Float    deriving (Show)

x1 = X 3 4 4.5

text :: X -> String
text (X a b c) = show a ++ show b ++ " \n"  ++ show c 

-- example output
-- >text x1
--"34 \n4.5"

data T a = T a         

instance Show a => Show (T a) where
    show (T a) = "Tx " ++ show a
tx1 = T x1

instance Show (T X) where
    show (T a) =  text a
    -------- works:
-- >tx1

More information about the Haskell-Cafe mailing list