Follow containers convention in Show instances and add Read instances
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Fri, 26 Aug 2011 22:04:27 +0000 (22:04 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Fri, 26 Aug 2011 22:04:27 +0000 (22:04 +0000)
Data/Vector.hs
Data/Vector/Generic.hs
Data/Vector/Primitive.hs
Data/Vector/Storable.hs
Data/Vector/Unboxed.hs

index 6b3cc98..70e6b5e 100644 (file)
@@ -178,6 +178,7 @@ import qualified Prelude
 
 import Data.Typeable ( Typeable )
 import Data.Data     ( Data(..) )
+import Text.Read     ( Read(..), readListPrecDefault )
 
 import Data.Monoid   ( Monoid(..) )
 import qualified Control.Applicative as Applicative
@@ -191,7 +192,11 @@ data Vector a = Vector {-# UNPACK #-} !Int
         deriving ( Typeable )
 
 instance Show a => Show (Vector a) where
-    show = (Prelude.++ " :: Data.Vector.Vector") . ("fromList " Prelude.++) . show . toList
+  showsPrec = G.showsPrec
+
+instance Read a => Read (Vector a) where
+  readPrec = G.readPrec
+  readListPrec = readListPrecDefault
 
 instance Data a => Data (Vector a) where
   gfoldl       = G.gfoldl
index b8cd8b6..b8f2e81 100644 (file)
@@ -153,6 +153,9 @@ module Data.Vector.Generic (
   -- ** Comparisons
   eq, cmp,
 
+  -- ** Show and Read
+  showsPrec, readPrec,
+
   -- ** @Data@ and @Typeable@
   gfoldl, dataCast, mkType
 ) where
@@ -187,8 +190,10 @@ import Prelude hiding ( length, null,
                         all, any, and, or, sum, product, maximum, minimum,
                         scanl, scanl1, scanr, scanr1,
                         enumFromTo, enumFromThenTo,
-                        mapM, mapM_, sequence, sequence_ )
+                        mapM, mapM_, sequence, sequence_,
+                        showsPrec )
 
+import qualified Text.Read as Read
 import Data.Typeable ( Typeable1, gcast1 )
 
 #include "vector.h"
@@ -1982,6 +1987,22 @@ cmp :: (Vector v a, Ord a) => v a -> v a -> Ordering
 {-# INLINE cmp #-}
 cmp xs ys = compare (stream xs) (stream ys)
 
+-- Show
+-- ----
+
+-- | Generic definition of 'Prelude.showsPrec'
+showsPrec :: (Vector v a, Show a) => Int -> v a -> ShowS
+{-# INLINE showsPrec #-}
+showsPrec p v = showParen (p > 10) $ showString "fromList " . shows (toList v)
+
+-- | Generic definition of 'Text.Read.readPrec'
+readPrec :: (Vector v a, Read a) => Read.ReadPrec (v a)
+{-# INLINE readPrec #-}
+readPrec = Read.parens $ Read.prec 10 $ do
+  Read.Ident "fromList" <- Read.lexP
+  xs <- Read.readPrec
+  return (fromList xs)
+
 -- Data and Typeable
 -- -----------------
 
index 56ae9c4..d76479d 100644 (file)
@@ -162,6 +162,7 @@ import qualified Prelude
 
 import Data.Typeable ( Typeable )
 import Data.Data     ( Data(..) )
+import Text.Read     ( Read(..), readListPrecDefault )
 
 import Data.Monoid   ( Monoid(..) )
 
@@ -172,7 +173,11 @@ data Vector a = Vector {-# UNPACK #-} !Int
   deriving ( Typeable )
 
 instance (Show a, Prim a) => Show (Vector a) where
-    show = (Prelude.++ " :: Data.Vector.Primitive.Vector") . ("fromList " Prelude.++) . show . toList
+  showsPrec = G.showsPrec
+
+instance (Read a, Prim a) => Read (Vector a) where
+  readPrec = G.readPrec
+  readListPrec = readListPrecDefault
 
 instance (Data a, Prim a) => Data (Vector a) where
   gfoldl       = G.gfoldl
index a0985cc..dccd292 100644 (file)
@@ -165,6 +165,7 @@ import qualified Prelude
 
 import Data.Typeable ( Typeable )
 import Data.Data     ( Data(..) )
+import Text.Read     ( Read(..), readListPrecDefault )
 
 import Data.Monoid   ( Monoid(..) )
 
@@ -176,10 +177,11 @@ data Vector a = Vector {-# UNPACK #-} !Int
         deriving ( Typeable )
 
 instance (Show a, Storable a) => Show (Vector a) where
-  show = (Prelude.++ " :: Data.Vector.Storable.Vector")
-       . ("fromList " Prelude.++)
-       . show
-       . toList
+  showsPrec = G.showsPrec
+
+instance (Read a, Storable a) => Read (Vector a) where
+  readPrec = G.readPrec
+  readListPrec = readListPrecDefault
 
 instance (Data a, Storable a) => Data (Vector a) where
   gfoldl       = G.gfoldl
index 3d98bed..8198a60 100644 (file)
@@ -184,6 +184,8 @@ import Prelude hiding ( length, null,
                         mapM, mapM_ )
 import qualified Prelude
 
+import Text.Read     ( Read(..), readListPrecDefault )
+
 import Data.Monoid   ( Monoid(..) )
 
 #include "vector.h"
@@ -224,7 +226,11 @@ instance Unbox a => Monoid (Vector a) where
   mconcat = concat
 
 instance (Show a, Unbox a) => Show (Vector a) where
-    show = (Prelude.++ " :: Data.Vector.Unboxed.Vector") . ("fromList " Prelude.++) . show . toList
+  showsPrec = G.showsPrec
+
+instance (Read a, Unbox a) => Read (Vector a) where
+  readPrec = G.readPrec
+  readListPrec = readListPrecDefault
 
 -- Length information
 -- ------------------