-- with instances for many datatypes. It corresponds to a merge between
-- the previous "Data.Generics.Basics" and almost all of
-- "Data.Generics.Instances". The instances that are not present
--- in this module are available in "Data.Generics.Instances".
+-- in this module were moved to the @Data.Generics.Instances@ module
+-- in the @syb@ package.
+--
+-- For more information, please visit the new
+-- SYB wiki: <http://www.cs.uu.nl/wiki/bin/view/GenericProgramming/SYB>.
--
--
-----------------------------------------------------------------------------
mkIntType, -- :: String -> DataType
mkFloatType, -- :: String -> DataType
mkStringType, -- :: String -> DataType
+ mkCharType, -- :: String -> DataType
+ mkNoRepType, -- :: String -> DataType
mkNorepType, -- :: String -> DataType
-- ** Observers
dataTypeName, -- :: DataType -> String
mkIntConstr, -- :: DataType -> Integer -> Constr
mkFloatConstr, -- :: DataType -> Double -> Constr
mkStringConstr, -- :: DataType -> String -> Constr
+ mkCharConstr, -- :: DataType -> Char -> Constr
-- ** Observers
constrType, -- :: Constr -> DataType
ConstrRep(..), -- instance of: Eq, Show
# ifdef __HUGS__
import Hugs.Prelude( Ratio(..) )
# endif
-import System.IO
import Foreign.Ptr
import Foreign.ForeignPtr
-import Foreign.StablePtr
-import Control.Monad.ST
-import Control.Concurrent
import Data.Array
-import Data.IORef
#endif
#include "Typeable.h"
-- | Build a term skeleton
fromConstr :: Data a => Constr -> a
-fromConstr = fromConstrB undefined
+fromConstr = fromConstrB (error "Data.Data.fromConstr")
-- | Build a term and use a generic function for subterms
-- | Public representation of datatypes
+{-# DEPRECATED StringRep "Use CharRep instead" #-}
data DataRep = AlgRep [Constr]
| IntRep
| FloatRep
- | StringRep
+ | StringRep -- ^ Deprecated. Please use 'CharRep' instead.
+ | CharRep
| NoRep
deriving (Eq,Show)
-- | Public representation of constructors
+{-# DEPRECATED StringConstr "Use CharConstr instead" #-}
data ConstrRep = AlgConstr ConIndex
| IntConstr Integer
| FloatConstr Double
- | StringConstr String
+ | StringConstr String -- ^ Deprecated. Please use 'CharConstr' instead.
+ | CharConstr Char
deriving (Eq,Show)
(IntRep, IntConstr i) -> mkIntConstr dt i
(FloatRep, FloatConstr f) -> mkFloatConstr dt f
(StringRep, StringConstr str) -> mkStringConstr dt str
+ (CharRep, CharConstr c) -> mkCharConstr dt c
_ -> error "repConstr"
IntRep -> mkReadCon (\i -> (mkPrimCon dt str (IntConstr i)))
FloatRep -> mkReadCon (\f -> (mkPrimCon dt str (FloatConstr f)))
StringRep -> Just (mkStringConstr dt str)
+ CharRep -> mkReadCon (\c -> (mkPrimCon dt str (CharConstr c)))
NoRep -> Nothing
where
mkFloatType = mkPrimType FloatRep
--- | Constructs the 'String' type
+-- | This function is now deprecated. Please use 'mkCharType' instead.
+{-# DEPRECATED mkStringType "Use mkCharType instead" #-}
mkStringType :: String -> DataType
mkStringType = mkPrimType StringRep
+-- | Constructs the 'Char' type
+mkCharType :: String -> DataType
+mkCharType = mkPrimType CharRep
+
-- | Helper for 'mkIntType', 'mkFloatType', 'mkStringType'
mkPrimType :: DataRep -> String -> DataType
FloatRep -> mkPrimCon dt (show f) (FloatConstr f)
_ -> error "mkFloatConstr"
-
+-- | This function is now deprecated. Please use 'mkCharConstr' instead.
+{-# DEPRECATED mkStringConstr "Use mkCharConstr instead" #-}
mkStringConstr :: DataType -> String -> Constr
mkStringConstr dt str = case datarep dt of
StringRep -> mkPrimCon dt str (StringConstr str)
_ -> error "mkStringConstr"
+-- | Makes a constructor for 'Char'.
+mkCharConstr :: DataType -> Char -> Constr
+mkCharConstr dt c = case datarep dt of
+ CharRep -> mkPrimCon dt (show c) (CharConstr c)
+ _ -> error "mkCharConstr"
+
------------------------------------------------------------------------------
--
------------------------------------------------------------------------------
--- | Constructs a non-representation for a non-presentable type
+-- | Deprecated version (misnamed)
+{-# DEPRECATED mkNorepType "Use mkNoRepType instead" #-}
mkNorepType :: String -> DataType
mkNorepType str = DataType
{ tycon = str
, datarep = NoRep
}
+-- | Constructs a non-representation for a non-presentable type
+mkNoRepType :: String -> DataType
+mkNoRepType str = DataType
+ { tycon = str
+ , datarep = NoRep
+ }
-- | Test for a non-representable type
isNorepType :: DataType -> Bool
------------------------------------------------------------------------------
charType :: DataType
-charType = mkStringType "Prelude.Char"
+charType = mkCharType "Prelude.Char"
instance Data Char where
- toConstr x = mkStringConstr charType [x]
+ toConstr x = mkCharConstr charType x
gunfold _ z c = case constrRep c of
- (StringConstr [x]) -> z x
+ (CharConstr x) -> z x
_ -> error "gunfold"
dataTypeOf _ = charType
------------------------------------------------------------------------------
-
---
--- A last resort for functions
---
-
-instance (Data a, Data b) => Data (a -> b) where
- toConstr _ = error "toConstr"
- gunfold _ _ = error "gunfold"
- dataTypeOf _ = mkNorepType "Prelude.(->)"
- dataCast2 f = gcast2 f
-
-
-------------------------------------------------------------------------------
-
tuple0Constr :: Constr
tuple0Constr = mkConstr tuple0DataType "()" [] Prefix
tuple3Constr = mkConstr tuple3DataType "(,,)" [] Infix
tuple3DataType :: DataType
-tuple3DataType = mkDataType "Prelude.(,)" [tuple3Constr]
+tuple3DataType = mkDataType "Prelude.(,,)" [tuple3Constr]
instance (Data a, Data b, Data c) => Data (a,b,c) where
gfoldl f z (a,b,c) = z (,,) `f` a `f` b `f` c
instance Typeable a => Data (Ptr a) where
toConstr _ = error "toConstr"
gunfold _ _ = error "gunfold"
- dataTypeOf _ = mkNorepType "GHC.Ptr.Ptr"
+ dataTypeOf _ = mkNoRepType "GHC.Ptr.Ptr"
------------------------------------------------------------------------------
instance Typeable a => Data (ForeignPtr a) where
toConstr _ = error "toConstr"
gunfold _ _ = error "gunfold"
- dataTypeOf _ = mkNorepType "GHC.ForeignPtr.ForeignPtr"
+ dataTypeOf _ = mkNoRepType "GHC.ForeignPtr.ForeignPtr"
------------------------------------------------------------------------------
gfoldl f z a = z (listArray (bounds a)) `f` (elems a)
toConstr _ = error "toConstr"
gunfold _ _ = error "gunfold"
- dataTypeOf _ = mkNorepType "Data.Array.Array"
+ dataTypeOf _ = mkNoRepType "Data.Array.Array"