From: Ross Paterson Date: Wed, 3 Sep 2008 11:35:43 +0000 (+0000) Subject: make Typeable instances for larger tuples available to non-GHC X-Git-Url: http://git.megacz.com/?p=ghc-base.git;a=commitdiff_plain;h=ce467cebf3e444f72c15a980f4707d40f4d0c891 make Typeable instances for larger tuples available to non-GHC --- diff --git a/Data/Typeable.hs b/Data/Typeable.hs index 6047823..0160a15 100644 --- a/Data/Typeable.hs +++ b/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/include/Typeable.h b/include/Typeable.h index 649d6f3..e9a6c7a 100644 --- a/include/Typeable.h +++ b/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