{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving, CPP #-} ----------------------------------------------------------------------------- -- | -- Module : Data.Generics.Instances -- Copyright : (c) The University of Glasgow, CWI 2001--2004 -- License : BSD-style (see the LICENSE file) -- -- Maintainer : generics@haskell.org -- Stability : experimental -- Portability : non-portable (uses Data.Data) -- -- \"Scrap your boilerplate\" --- Generic programming in Haskell -- See <http://www.cs.uu.nl/wiki/GenericProgramming/SYB>. The present module -- contains thirteen 'Data' instances which are considered dubious (either -- because the types are abstract or just not meant to be traversed). -- Instances in this module might change or disappear in future releases -- of this package. -- -- (This module does not export anything. It really just defines instances.) -- ----------------------------------------------------------------------------- {-# OPTIONS_GHC -fno-warn-orphans #-} module Data.Generics.Instances () where ------------------------------------------------------------------------------ import Data.Data #ifdef __GLASGOW_HASKELL__ #if __GLASGOW_HASKELL__ >= 611 import GHC.IO.Handle -- So we can give Data instance for Handle #else import GHC.IOBase -- So we can give Data instance for IO, Handle #endif import GHC.Stable -- So we can give Data instance for StablePtr import GHC.ST -- So we can give Data instance for ST import GHC.Conc -- So we can give Data instance for TVar import Data.IORef -- So we can give Data instance for IORef import Control.Concurrent -- So we can give Data instance for MVar #else # ifdef __HUGS__ import Hugs.Prelude( Ratio(..) ) # endif import System.IO import Foreign.Ptr import Foreign.ForeignPtr import Foreign.StablePtr import Control.Monad.ST #endif -- Version compatibility issues caused by #2760 myMkNoRepType :: String -> DataType #if __GLASGOW_HASKELL__ >= 611 myMkNoRepType = mkNoRepType #else myMkNoRepType = mkNorepType #endif ------------------------------------------------------------------------------ -- -- Instances of the Data class for Prelude-like types. -- We define top-level definitions for representations. -- ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Instances of abstract datatypes (6) ------------------------------------------------------------------------------ #if __GLASGOW_HASKELL__ < 801 instance Data TypeRep where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "Data.Typeable.TypeRep" #endif ------------------------------------------------------------------------------ instance Data TyCon where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "Data.Typeable.TyCon" ------------------------------------------------------------------------------ #if __GLASGOW_HASKELL__ < 709 deriving instance Typeable DataType #endif instance Data DataType where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "Data.Generics.Basics.DataType" ------------------------------------------------------------------------------ instance Data Handle where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.IOBase.Handle" ------------------------------------------------------------------------------ instance Typeable a => Data (StablePtr a) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.Stable.StablePtr" ------------------------------------------------------------------------------ #ifdef __GLASGOW_HASKELL__ instance Data ThreadId where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.Conc.ThreadId" #endif ------------------------------------------------------------------------------ -- Dubious instances (7) ------------------------------------------------------------------------------ #ifdef __GLASGOW_HASKELL__ instance Typeable a => Data (TVar a) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.Conc.TVar" #endif ------------------------------------------------------------------------------ instance Typeable a => Data (MVar a) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.Conc.MVar" ------------------------------------------------------------------------------ #ifdef __GLASGOW_HASKELL__ instance Typeable a => Data (STM a) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.Conc.STM" #endif ------------------------------------------------------------------------------ instance (Typeable s, Typeable a) => Data (ST s a) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.ST.ST" ------------------------------------------------------------------------------ instance Typeable a => Data (IORef a) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.IOBase.IORef" ------------------------------------------------------------------------------ instance Typeable a => Data (IO a) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "GHC.IOBase.IO" ------------------------------------------------------------------------------ -- -- A last resort for functions -- instance (Data a, Data b) => Data (a -> b) where toConstr _ = error "toConstr" gunfold _ _ = error "gunfold" dataTypeOf _ = myMkNoRepType "Prelude.(->)" dataCast2 f = gcast2 f