diff options
author | Ross Paterson <ross@soi.city.ac.uk> | 2008-09-03 11:35:43 +0000 |
---|---|---|
committer | Ross Paterson <ross@soi.city.ac.uk> | 2008-09-03 11:35:43 +0000 |
commit | e8a0e6100d11a97757bb55addb057ac2706328e8 (patch) | |
tree | 81891b201a19c5de72541f44348f7103247f8bf2 /libraries/base | |
parent | a7b8c05d88c516d87ce35713488946bf8128966c (diff) | |
download | haskell-e8a0e6100d11a97757bb55addb057ac2706328e8.tar.gz |
make Typeable instances for larger tuples available to non-GHC
Diffstat (limited to 'libraries/base')
-rw-r--r-- | libraries/base/Data/Typeable.hs | 28 | ||||
-rw-r--r-- | libraries/base/include/Typeable.h | 80 |
2 files changed, 84 insertions, 24 deletions
diff --git a/libraries/base/Data/Typeable.hs b/libraries/base/Data/Typeable.hs index 6047823fe8..0160a1570d 100644 --- a/libraries/base/Data/Typeable.hs +++ b/libraries/base/Data/Typeable.hs @@ -508,30 +508,10 @@ INSTANCE_TYPEABLE3(STArray,sTArrayTc,"STArray") #ifndef __NHC__ INSTANCE_TYPEABLE2((,),pairTc,"(,)") INSTANCE_TYPEABLE3((,,),tup3Tc,"(,,)") - -tup4Tc :: TyCon -tup4Tc = mkTyCon "(,,,)" - -instance Typeable4 (,,,) where - typeOf4 _ = mkTyConApp tup4Tc [] - -tup5Tc :: TyCon -tup5Tc = mkTyCon "(,,,,)" - -instance Typeable5 (,,,,) where - typeOf5 _ = mkTyConApp tup5Tc [] - -tup6Tc :: TyCon -tup6Tc = mkTyCon "(,,,,,)" - -instance Typeable6 (,,,,,) where - typeOf6 _ = mkTyConApp tup6Tc [] - -tup7Tc :: TyCon -tup7Tc = mkTyCon "(,,,,,,)" - -instance Typeable7 (,,,,,,) where - typeOf7 _ = mkTyConApp tup7Tc [] +INSTANCE_TYPEABLE4((,,,),tup4Tc,"(,,,)") +INSTANCE_TYPEABLE5((,,,,),tup5Tc,"(,,,,)") +INSTANCE_TYPEABLE6((,,,,,),tup6Tc,"(,,,,,)") +INSTANCE_TYPEABLE7((,,,,,,),tup7Tc,"(,,,,,,)") #endif /* __NHC__ */ INSTANCE_TYPEABLE1(Ptr,ptrTc,"Ptr") diff --git a/libraries/base/include/Typeable.h b/libraries/base/include/Typeable.h index 649d6f367d..e9a6c7ac1c 100644 --- a/libraries/base/include/Typeable.h +++ b/libraries/base/include/Typeable.h @@ -39,6 +39,26 @@ tcname :: TyCon; \ tcname = mkTyCon str; \ instance Typeable3 tycon where { typeOf3 _ = mkTyConApp tcname [] } +#define INSTANCE_TYPEABLE4(tycon,tcname,str) \ +tcname :: TyCon; \ +tcname = mkTyCon str; \ +instance Typeable4 tycon where { typeOf4 _ = mkTyConApp tcname [] } + +#define INSTANCE_TYPEABLE5(tycon,tcname,str) \ +tcname :: TyCon; \ +tcname = mkTyCon str; \ +instance Typeable5 tycon where { typeOf5 _ = mkTyConApp tcname [] } + +#define INSTANCE_TYPEABLE6(tycon,tcname,str) \ +tcname :: TyCon; \ +tcname = mkTyCon str; \ +instance Typeable6 tycon where { typeOf6 _ = mkTyConApp tcname [] } + +#define INSTANCE_TYPEABLE7(tycon,tcname,str) \ +tcname :: TyCon; \ +tcname = mkTyCon str; \ +instance Typeable7 tycon where { typeOf7 _ = mkTyConApp tcname [] } + #else /* !__GLASGOW_HASKELL__ */ #define INSTANCE_TYPEABLE1(tycon,tcname,str) \ @@ -64,6 +84,66 @@ instance (Typeable a, Typeable b) => Typeable1 (tycon a b) where { \ instance (Typeable a, Typeable b, Typeable c) => Typeable (tycon a b c) where { \ typeOf = typeOfDefault } +#define INSTANCE_TYPEABLE4(tycon,tcname,str) \ +tcname = mkTyCon str; \ +instance Typeable4 tycon where { typeOf4 _ = mkTyConApp tcname [] }; \ +instance Typeable a => Typeable3 (tycon a) where { \ + typeOf3 = typeOf3Default }; \ +instance (Typeable a, Typeable b) => Typeable2 (tycon a b) where { \ + typeOf2 = typeOf2Default }; \ +instance (Typeable a, Typeable b, Typeable c) => Typeable1 (tycon a b c) where { \ + typeOf1 = typeOf1Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable (tycon a b c d) where { \ + typeOf = typeOfDefault } + +#define INSTANCE_TYPEABLE5(tycon,tcname,str) \ +tcname = mkTyCon str; \ +instance Typeable5 tycon where { typeOf5 _ = mkTyConApp tcname [] }; \ +instance Typeable a => Typeable4 (tycon a) where { \ + typeOf4 = typeOf4Default }; \ +instance (Typeable a, Typeable b) => Typeable3 (tycon a b) where { \ + typeOf3 = typeOf3Default }; \ +instance (Typeable a, Typeable b, Typeable c) => Typeable2 (tycon a b c) where { \ + typeOf2 = typeOf2Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable1 (tycon a b c d) where { \ + typeOf1 = typeOf1Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable (tycon a b c d e) where { \ + typeOf = typeOfDefault } + +#define INSTANCE_TYPEABLE6(tycon,tcname,str) \ +tcname = mkTyCon str; \ +instance Typeable6 tycon where { typeOf6 _ = mkTyConApp tcname [] }; \ +instance Typeable a => Typeable5 (tycon a) where { \ + typeOf5 = typeOf5Default }; \ +instance (Typeable a, Typeable b) => Typeable4 (tycon a b) where { \ + typeOf4 = typeOf4Default }; \ +instance (Typeable a, Typeable b, Typeable c) => Typeable3 (tycon a b c) where { \ + typeOf3 = typeOf3Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable2 (tycon a b c d) where { \ + typeOf2 = typeOf2Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable1 (tycon a b c d e) where { \ + typeOf1 = typeOf1Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f) => Typeable (tycon a b c d e f) where { \ + typeOf = typeOfDefault } + +#define INSTANCE_TYPEABLE7(tycon,tcname,str) \ +tcname = mkTyCon str; \ +instance Typeable7 tycon where { typeOf7 _ = mkTyConApp tcname [] }; \ +instance Typeable a => Typeable6 (tycon a) where { \ + typeOf6 = typeOf6Default }; \ +instance (Typeable a, Typeable b) => Typeable5 (tycon a b) where { \ + typeOf5 = typeOf5Default }; \ +instance (Typeable a, Typeable b, Typeable c) => Typeable4 (tycon a b c) where { \ + typeOf4 = typeOf4Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d) => Typeable3 (tycon a b c d) where { \ + typeOf3 = typeOf3Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e) => Typeable2 (tycon a b c d e) where { \ + typeOf2 = typeOf2Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f) => Typeable1 (tycon a b c d e f) where { \ + typeOf1 = typeOf1Default }; \ +instance (Typeable a, Typeable b, Typeable c, Typeable d, Typeable e, Typeable f, Typeable g) => Typeable (tycon a b c d e f g) where { \ + typeOf = typeOfDefault } + #endif /* !__GLASGOW_HASKELL__ */ #endif |