X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Data%2FDynamic.hs;h=2ca46895a6b5713dae2def4f6594fddb06270407;hb=a458251c451c74752517d50253d8ea4cb8afe253;hp=6379d33c5b7eacbbc3ed9ce6c2ce6f7d826f163a;hpb=3a3c5dde1a91357fa258682510f75e37e0340913;p=ghc-base.git diff --git a/Data/Dynamic.hs b/Data/Dynamic.hs index 6379d33..2ca4689 100644 --- a/Data/Dynamic.hs +++ b/Data/Dynamic.hs @@ -79,6 +79,7 @@ import GHC.IOBase #endif #ifdef __HUGS__ +import Hugs.Prelude import Hugs.IO import Hugs.IORef import Hugs.IOExts @@ -89,7 +90,12 @@ unsafeCoerce :: a -> b unsafeCoerce = unsafeCoerce# #endif +#ifdef __NHC__ +import NonStdUnsafeCoerce (unsafeCoerce) +import NHC.IOExtras (IORef,newIORef,readIORef,writeIORef,unsafePerformIO) +#else #include "Dynamic.h" +#endif {-| A value of type 'Dynamic' is an object encapsulated together with its type. @@ -101,7 +107,9 @@ unsafeCoerce = unsafeCoerce# 'Show'ing a value of type 'Dynamic' returns a pretty-printed representation of the object\'s type; useful for debugging. -} +#ifndef __HUGS__ data Dynamic = Dynamic TypeRep Obj +#endif instance Show Dynamic where -- the instance just prints the type representation. @@ -110,6 +118,7 @@ instance Show Dynamic where showsPrec 0 t . showString ">>" +#ifdef __GLASGOW_HASKELL__ type Obj = forall a . a -- Dummy type to hold the dynamically typed value. -- @@ -120,13 +129,18 @@ type Obj = forall a . a -- the other hand, if we use a polymorphic type, GHC will use -- a fallback convention for evaluating it that works for all types. -- (using a function type here would also work). +#elif !defined(__HUGS__) +data Obj = Obj +#endif -- | A concrete representation of a (monomorphic) type. 'TypeRep' -- supports reasonably efficient equality. +#ifndef __HUGS__ data TypeRep = App TyCon [TypeRep] | Fun TypeRep TypeRep deriving ( Eq ) +#endif instance Show TypeRep where showsPrec p (App tycon tys) = @@ -147,10 +161,12 @@ instance Show TypeRep where -- | An abstract representation of a type constructor. 'TyCon' objects can -- be built using 'mkTyCon'. +#ifndef __HUGS__ data TyCon = TyCon Int String instance Eq TyCon where (TyCon t1 _) == (TyCon t2 _) = t1 == t2 +#endif instance Show TyCon where showsPrec _ (TyCon _ s) = showString s @@ -351,6 +367,7 @@ instance (Typeable a, Typeable b) => Typeable (a -> b) where typeOf f = mkFunTy (typeOf ((undefined :: (a -> b) -> a) f)) (typeOf ((undefined :: (a -> b) -> b) f)) +#ifndef __NHC__ INSTANCE_TYPEABLE0(Bool,boolTc,"Bool") INSTANCE_TYPEABLE0(Char,charTc,"Char") INSTANCE_TYPEABLE0(Float,floatTc,"Float") @@ -379,7 +396,6 @@ INSTANCE_TYPEABLE0(TyCon,tyconTc,"TyCon") INSTANCE_TYPEABLE0(TypeRep,typeRepTc,"TypeRep") INSTANCE_TYPEABLE0(Dynamic,dynamicTc,"Dynamic") -#ifndef __NHC__ #include "Dynamic.h" INSTANCE_TYPEABLE1(IORef,ioRefTc,"IORef") #endif