summaryrefslogtreecommitdiff
path: root/testsuite/tests/deriving/should_run/drvrun006.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/deriving/should_run/drvrun006.hs')
-rw-r--r--testsuite/tests/deriving/should_run/drvrun006.hs49
1 files changed, 49 insertions, 0 deletions
diff --git a/testsuite/tests/deriving/should_run/drvrun006.hs b/testsuite/tests/deriving/should_run/drvrun006.hs
new file mode 100644
index 0000000000..3d268019bd
--- /dev/null
+++ b/testsuite/tests/deriving/should_run/drvrun006.hs
@@ -0,0 +1,49 @@
+-- !!! Show/Read deriving example given in the Haskell Report.
+module Main(main) where
+
+infix 4 :^:
+data Tree a
+ = Leaf a | (Tree a) :^: (Tree a)
+ deriving (Show, Read)
+
+val1 :: Tree Int
+val1 = Leaf 2
+
+val2 :: Tree Int
+val2 = Leaf 2 :^: Leaf (-1)
+
+main = do
+ print val1
+ print val2
+
+ print ((read (show val1))::Tree Int)
+ print ((read (show val2))::Tree Int)
+ print ((read (show val1))::Tree Integer)
+ print ((read (show val2))::Tree Integer)
+
+{- What you'll want
+instance (Show a) => Show (Tree a) where
+
+ showsPrec d (Leaf m) = showParen (d >= 10) showStr
+ where
+ showStr = showString "Leaf " . showsPrec 10 m
+
+ showsPrec d (u :^: v) = showParen (d > 4) showStr
+ where
+ showStr = showsPrec 5 u .
+ showString " :^: " .
+ showsPrec 5 v
+
+instance (Read a) => Read (Tree a) where
+
+ readsPrec d r = readParen (d > 4)
+ (\r -> [(u:^:v,w) |
+ (u,s) <- readsPrec 5 r,
+ (":^:",t) <- lex s,
+ (v,w) <- readsPrec 5 t]) r
+
+ ++ readParen (d > 9)
+ (\r -> [(Leaf m,t) |
+ ("Leaf",s) <- lex r,
+ (m,t) <- readsPrec 10 s]) r
+-}