diff options
Diffstat (limited to 'standalone/no-th/haskell-patches/reflection_remove-TH.patch')
-rw-r--r-- | standalone/no-th/haskell-patches/reflection_remove-TH.patch | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/standalone/no-th/haskell-patches/reflection_remove-TH.patch b/standalone/no-th/haskell-patches/reflection_remove-TH.patch new file mode 100644 index 000000000..7c63f05fc --- /dev/null +++ b/standalone/no-th/haskell-patches/reflection_remove-TH.patch @@ -0,0 +1,113 @@ +From 22c68b43dce437b3c22956f5a968f1b886e60e0c Mon Sep 17 00:00:00 2001 +From: Joey Hess <joey@kitenet.net> +Date: Tue, 17 Dec 2013 19:15:16 +0000 +Subject: [PATCH] remove TH + +--- + fast/Data/Reflection.hs | 80 +------------------------------------------------ + 1 file changed, 1 insertion(+), 79 deletions(-) + +diff --git a/fast/Data/Reflection.hs b/fast/Data/Reflection.hs +index 119d773..cf99efa 100644 +--- a/fast/Data/Reflection.hs ++++ b/fast/Data/Reflection.hs +@@ -58,7 +58,7 @@ module Data.Reflection + , Given(..) + , give + -- * Template Haskell reflection +- , int, nat ++ --, int, nat + -- * Useful compile time naturals + , Z, D, SD, PD + ) where +@@ -151,87 +151,9 @@ instance Reifies n Int => Reifies (PD n) Int where + reflect = (\n -> n + n - 1) <$> retagPD reflect + {-# INLINE reflect #-} + +--- | This can be used to generate a template haskell splice for a type level version of a given 'int'. +--- +--- This does not use GHC TypeLits, instead it generates a numeric type by hand similar to the ones used +--- in the \"Functional Pearl: Implicit Configurations\" paper by Oleg Kiselyov and Chung-Chieh Shan. +-int :: Int -> TypeQ +-int n = case quotRem n 2 of +- (0, 0) -> conT ''Z +- (q,-1) -> conT ''PD `appT` int q +- (q, 0) -> conT ''D `appT` int q +- (q, 1) -> conT ''SD `appT` int q +- _ -> error "ghc is bad at math" +- +--- | This is a restricted version of 'int' that can only generate natural numbers. Attempting to generate +--- a negative number results in a compile time error. Also the resulting sequence will consist entirely of +--- Z, D, and SD constructors representing the number in zeroless binary. +-nat :: Int -> TypeQ +-nat n +- | n >= 0 = int n +- | otherwise = error "nat: negative" +- +-#if defined(__GLASGOW_HASKELL__) && __GLASGOW_HASKELL < 704 +-instance Show (Q a) +-instance Eq (Q a) +-#endif +-instance Num a => Num (Q a) where +- (+) = liftM2 (+) +- (*) = liftM2 (*) +- (-) = liftM2 (-) +- negate = fmap negate +- abs = fmap abs +- signum = fmap signum +- fromInteger = return . fromInteger +- +-instance Fractional a => Fractional (Q a) where +- (/) = liftM2 (/) +- recip = fmap recip +- fromRational = return . fromRational +- +--- | This permits the use of $(5) as a type splice. +-instance Num Type where +-#ifdef USE_TYPE_LITS +- a + b = AppT (AppT (VarT ''(+)) a) b +- a * b = AppT (AppT (VarT ''(*)) a) b +-#if MIN_VERSION_base(4,8,0) +- a - b = AppT (AppT (VarT ''(-)) a) b +-#else +- (-) = error "Type.(-): undefined" +-#endif +- fromInteger = LitT . NumTyLit +-#else +- (+) = error "Type.(+): undefined" +- (*) = error "Type.(*): undefined" +- (-) = error "Type.(-): undefined" +- fromInteger n = case quotRem n 2 of +- (0, 0) -> ConT ''Z +- (q,-1) -> ConT ''PD `AppT` fromInteger q +- (q, 0) -> ConT ''D `AppT` fromInteger q +- (q, 1) -> ConT ''SD `AppT` fromInteger q +- _ -> error "ghc is bad at math" +-#endif +- abs = error "Type.abs" +- signum = error "Type.signum" +- + plus, times, minus :: Num a => a -> a -> a + plus = (+) + times = (*) + minus = (-) + fract :: Fractional a => a -> a -> a + fract = (/) +- +--- | This permits the use of $(5) as an expression splice. +-instance Num Exp where +- a + b = AppE (AppE (VarE 'plus) a) b +- a * b = AppE (AppE (VarE 'times) a) b +- a - b = AppE (AppE (VarE 'minus) a) b +- negate = AppE (VarE 'negate) +- signum = AppE (VarE 'signum) +- abs = AppE (VarE 'abs) +- fromInteger = LitE . IntegerL +- +-instance Fractional Exp where +- a / b = AppE (AppE (VarE 'fract) a) b +- recip = AppE (VarE 'recip) +- fromRational = LitE . RationalL +-- +1.8.5.1 + |